如何在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

我想使用XML映射在Hibernate中映射多对多关系。

我有两门课,
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>