Hallo,
die Syntax dieser beiden Anweisungen habe ich im Internet gefunden für eine ähnliche Situation. Aber auch nach vielem rumdoktorn habe ich es nicht hingekriegt. Wenn die Syntax nicht stimmt, ist das natürlich kein Wunder. Ich bin zur Zeit bei meinen Eltern und mein Hibernate-Buch liegt zu Hause. Deswegen kann ich die Elements-Funktion nicht nachschlagen.
Ich poste mal nur einen Teil von Person, weil sie aus einem ganzen Berg Getter und Setter besteht und ziemlich groß ist. Ich lasse mal alles drin, was für die Beziehungen notwendig ist.
Person enthält eigentlich nur Angaben, welche für eine Person wichtig sind (Adressdaten, usw.), und verschiedene Beziehungen zu anderen Klassen. Eine Person soll nun verschiedenen Kategorien zugeordnet werden können. Und eine Kategorie soll nicht nur eine Person enthalten, sondern mehrere. Die n:m-Beziehung funktioniert auch wunderbar. Personen werden richtig gespeichert und die Kategorien werden in einer Personenliste auch einwandfrei angezeigt.
Code:
package de.waldhausweg7.model;
public class Person extends BeanBase implements Listener{
private int personId;
private String firstName;
/**
* Die Stadt, in welcher die Person wohnt.
*/
private City city;
/**
* Enthält die Kategorien einer Person.
*/
private Set<Category> categories = new HashSet<Category>();
/**
* Die Konfession der Person.
*/
private Confession confession;
/**
* Das Heimatland der Person.
*/
private Country country;
/**
* Der Diskriminator.
* p = Person
* l = Lodger
*/
private String personType;
/**
* Die Mieten der Person.
*/
private Set<Rent> rents = new HashSet<Rent>();
// Getter und Setter.
public int getPersonId() {
return personId;
}
public void setPersonId(int personId) {
this.personId = personId;
}
}
Hier ist die Mapping-Datei:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="true" auto-import="true">
<class name="de.waldhausweg7.model.Person" table="Person">
<id name="personId" type="int">
<generator class="increment" />
</id>
<discriminator column="personType" type="string" force="true" />
<property name="firstName" column="firstName" />
<property name="surName" column="surName" />
<property name="street" column="street" />
<property name="extraAddressLine" column="extraAddressLine" />
<property name="phone" column="phone" />
<property name="mobile" column="mobile" />
<property name="fax" column="fax" />
<property name="email" column="email" />
<property name="comment" column="comment" />
<!-- 1:n-Beziehung zu Ort -->
<many-to-one name="city" column="cityId" class="de.waldhausweg7.model.City" />
<!-- 1:n-Beziehung zu Konfession -->
<many-to-one name="confession" column="confessionId" class="de.waldhausweg7.model.Confession" />
<!-- 1:n-Beziehung zu Land -->
<many-to-one name="country" column="countryId" class="de.waldhausweg7.model.Country" />
<!-- n:m-Beziehung zu Kategorie -->
<set name="categories" table="person_category" lazy="false">
<key column="personId" />
<many-to-many class="de.waldhausweg7.model.Category" column="categoryId" />
</set>
<!-- 1:n-Beziehung zu Miete -->
<set name="rents" cascade="none" lazy="true">
<key column="personId" />
<one-to-many class="de.waldhausweg7.model.Rent" />
</set>
<!-- Beziehung zu der Unterklasse Lodger -->
<subclass name="de.waldhausweg7.model.Lodger" discriminator-value="l">
<property name="gender" column="gender" />
</subclass>
</class>
</hibernate-mapping>
Und hier die Mapping-Datei zu Category:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="false" auto-import="true">
<class name="de.waldhausweg7.model.Category" table="Category">
<id name="categoryId" type="int">
<generator class="increment" />
</id>
<property name="categoryName" column="categoryName" />
<property name="comment" column="comment" />
</class>
</hibernate-mapping>
Und die Klasse Category:
Code:
package de.waldhausweg7.model;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.faces.validator.ValidatorException;
import com.icesoft.faces.component.ext.RowSelectorEvent;
import de.waldhausweg7.listener.BeanBase;
import de.waldhausweg7.listener.Listener;
import de.waldhausweg7.pages.PersonPage;
import de.waldhausweg7.service.CategoryService;
import de.waldhausweg7.utils.JsfUtil;
public class Category extends BeanBase implements Listener {
private int categoryId;
private String categoryName;
private String comment;
/**
* Kategorien in einer Liste aus SelectItems.
*/
//private List<SelectItem> categoryItems;
// Konstruktoren.
public Category(int categoryId, String categoryName) {
this.categoryId = categoryId;
this.categoryName = categoryName;
}
public Category() {
}
// Getter und Setter.
public int getCategoryId() {
return categoryId;
}
public void setCategoryId(int categoryId) {
this.categoryId = categoryId;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
Viele Grüße,
Christopher