如何在Hibernate中使用额外的列映射多对多关系
我想使用XML映射在Hibernate中映射多对多关系。如何在Hibernate中使用额外的列映射多对多关系,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我想使用XML映射在Hibernate中映射多对多关系。 我有两门课,Voiture和Cient。我想创建一个链接表Reservation,它将包含复合键(idClient,idVoiture)和3个额外列(dateReservation,duree,prix)将其映射为具有多对一的复合元素: <list ... table="LinkTable"> ... <key> <column name="idClient" /> </key
我有两门课,
Voiture
和Cient
。我想创建一个链接表Reservation
,它将包含复合键(idClient,idVoiture)
和3个额外列(dateReservation,duree,prix)
将其映射为具有多对一的复合元素:
<list ... table="LinkTable">
...
<key>
<column name="idClient" />
</key>
<composite-element class="MyLinkType">
<property name="DateReservation" />
<property name="Duree" />
<property name="Prix" />
<many-to-one name="Voiture" column="idVoiture" class="Voiture" />
</composite-element>
</list>
...
仔细考虑如何使它双向。复合元素正在映射属于列表所有者的属性
或者,使链接表成为自己的实体。我这样做了,是真的吗 Client.java:
@ManagedBean
@ViewScoped
public class Client implements Serializable
{
private static final long serialVersionUID = 1L;
private Long idClient;
private String nom;
private String prenom;
private String cin;
private String adresse;
private String login;
private String pass;
private String numTel;
private Set<Voiture> voitures=new HashSet<Voiture>();
}
reseraviation.hbm.xml:
<?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>
<class name="dao.Reservation" table="RESERVATIONS">
<composite-id>
<key-many-to-one name="idClient" column="ID_CLIENT" class="CLIENT"/>
<key-many-to-one name="idVoiture" column="ID_VOITURE" class="VOITURE"/>
</composite-id>
<property name="dateReservation" column="DATE_RESERVATION"/>
<property name="duree" column="DUREE" />
<property name="prix_total" column="PRIX_TOTAL" />
</class>
</hibernate-mapping>
@ManagedBean
@ViewScoped
public class Voiture implements Serializable {
private static final long serialVersionUID = 1L;
private Long idVoiture;
private String marque;
private String moteur;
private String type;
private Long annee;
private Long places;
private String boite;
private String climatisation;
private Double prix;
private String dispo;
private String image;
private Set<Client> clients=new HashSet<Client>();
}
<?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>
<class name="dao.Voiture" table="VOITURES">
<id name="idVoiture" column="ID_VOITURE">
<generator class="native"></generator>
</id>
<property name="marque" column="MARQUE"></property>
<property name="type" column="TYPE"></property>
<property name="prix" column="PRIX"></property>
<property name="dispo" column="DISPO"></property>
<property name="climatisation" column="CLIMATISATION"></property>
<property name="boite" column="BOITE"></property>
<property name="annee" column="ANNEE"></property>
<property name="image" column="IMAGE"></property>
<property name="places" column="PLACES"></property>
<property name="moteur" column="MOTEUR"></property>
<set name="clients" lazy="true" cascade="all-delete-orphan">
<key column="ID_VOITURE" />
<one-to-many class="client"/>
</set>
</class>
</hibernate-mapping>
@ManagedBean
@ViewScoped
public class Reservation implements Serializable
{
private static final long serialVersionUID = 1L;
private Long idClient;
private Long idVoiture;
private Date dateReservation;
private Long duree;
private double prix_total;
}
<?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>
<class name="dao.Reservation" table="RESERVATIONS">
<composite-id>
<key-many-to-one name="idClient" column="ID_CLIENT" class="CLIENT"/>
<key-many-to-one name="idVoiture" column="ID_VOITURE" class="VOITURE"/>
</composite-id>
<property name="dateReservation" column="DATE_RESERVATION"/>
<property name="duree" column="DUREE" />
<property name="prix_total" column="PRIX_TOTAL" />
</class>
</hibernate-mapping>