我想使用 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)
答案 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>