如何在Hibernate中使用额外的列映射多对多关系

时间:2016-04-08 12:00:05

标签: hibernate hibernate-mapping

我想使用 XML 映射在 Hibernate 中映射多对多关系。
我有两个班级,<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="confusionApp" class="container"> <div class="row row-content" ng-controller="dishDetailController as dishCtrl"> <div class="col-xs-12"> <div class="media"> <div class="media-left media-middle"> <a href="#"> <img class="media-object img-thumbnail" ng-src={{dishCtrl.dish.image}} alt="Uthappizza"> </a> </div> <div class="media-body"> <h2 class="media-heading">{{dishCtrl.dish.name}} <span class="label label-danger">{{dishCtrl.dish.label}}</span> <span class="badge">{{dishCtrl.dish.price | currency}}</span> </h2> <p>{{dishCtrl.dish.description}}</p> </div> </div> </div> <div class="col-xs-9 col-xs-offset-1"> <p>Put the comments here</p> </div> </div> </div> Voiture。我想创建一个链接表Cient,其中包含复合键Reservation和3个额外列(idClient,idVoiture)

2 个答案:

答案 0 :(得分:0)

将其映射为具有多对一的复合元素:

<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>

仔细考虑如何使其双向化。复合元素是映射属于列表所有者的属性。

或者,将链接表作为自己的实体。

答案 1 :(得分:0)

我这样做了,是真的吗?:

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>();
}

Client.hbm.xml:

 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapp`ing PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="dao.Client" table="CLIENTS" >
<id name="idClient" column="ID_CLIENT">
<generator class="native"></generator>
</id>
<property name="nom" column="NOM"></property>
<property name="prenom" column="PRENOM"></property>
<property name="cin" column="CIN"></property>
<property name="adresse" column="ADRESSE"></property>
<property name="login" column="LOGIN"></property>
<property name="pass" column="PASS"></property>
<property name="numTel" column="NUM_TEL"></property>
    <set name="voitures" 
        lazy="true"
        cascade="all-delete-orphan">
       <key column="ID_VOITURE" />
       <one-to-many class="voiture"/>
    </set>
    </class> 

Voiture.java:

 @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>();
 }

Voiture.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.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>

Reservation.java:

 @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;
 }

Reseravation.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>
相关问题