一对多的双向关联
publicclassUser implements Serializable {
privateInteger id;
privateString name;
privateInteger age;
privateCard card;
private Set cards;
publicclassCards implements Serializable {
privateInteger cid;
privateString info;
private User user;
Cards.hbm.xml
<class name="org.hibernate.tutorial.domain.Cards"table="cards">
<id name="cid" type="java.lang.Integer"column="cid">
<generator class="native"/>
</id>
<property name="info" type="java.lang.String"column="info" length="255"/>
<many-to-one name="user" column="uid"cascade="all"/>
</class>
User.hbm.xml
<class name="org.hibernate.tutorial.domain.User"table="user">
<id name="id"type="java.lang.Integer" column="id">
<generator class="native" />
</id>
<property name="name" type="java.lang.String"column="name" />
<property name="age" type="java.lang.Integer"column="age" />
<set name="cards" inverse="false"cascade="all">
<key>
<column name="uid" />
</key>
<one-to-many class="org.hibernate.tutorial.domain.Cards"/>
</set>
</class>
测试
Useruser2= newUser();
user2.setName("Lucy46");
user2.setAge(29);
// session.save(user);
Cardscard= newCards();
card.setInfo("acard");
card.setUser(user2);
Set<Cards>s = new HashSet<Cards>();
user2.setCards(s);
user2.getCards().add(card);
session.save(card);
// session.save(user2);
测试时候,session.save保存任意的card或则user都是可以级联插入的.
其中inverse="false",如果配置成false,那么关联关系由one方维护,那么插入时会产生三条语句,
Hibernate: insert into user (name,age) values (?, ?)
Hibernate: insert into cards (info,uid) values (?, ?)
Hibernate: update cards set uid=?where cid=?
如果inverse=“true”,那么关联关系由many方维护,插入只需要两条语句,应该效率会搞点。
Hibernate: insert into user (name,age) values (?, ?)
Hibernate: insert into cards (info,uid) values (?, ?)