Hibernate一对多有两种,单向和双向。
单向一对多中,一般在“一”方定义one-to-many的set,由“一”方维护关联关系,如
User.hbm.xml:
......
xml代码
<set name="cards" inverse="false" cascade="all">
<key column="userId" not-null="true" /> <!-- Card表中指向User表的关联外键 -->
<one-to-many class="wintys.hibernate.onetomany.Card" />
</set>
在“多”方则不再需定义和“一”方关联的外键。
因为“一”方设置了cascade="all",我们在代码中只需持久化“一”方对象即可。
java代码
set cards = new hashset();
c = new Card(3650f);
cards.add(c1);
user.setCards(cards);
session.save(user);
但是这里要注意的是,Hibernate在关联保存card时,会先插入外键为空的记录,然后再update外键和user关联,因此外键字段要设为允许null,否则会报错。
单向一对多中,一般在“一”方定义one-to-many的set,由“一”方维护关联关系,如
User.hbm.xml:
......
xml代码
<set name="cards" inverse="false" cascade="all">
<key column="userId" not-null="true" /> <!-- Card表中指向User表的关联外键 -->
<one-to-many class="wintys.hibernate.onetomany.Card" />
</set>
在“多”方则不再需定义和“一”方关联的外键。
因为“一”方设置了cascade="all",我们在代码中只需持久化“一”方对象即可。
java代码
set cards = new hashset();
c = new Card(3650f);
cards.add(c1);
user.setCards(cards);
session.save(user);
但是这里要注意的是,Hibernate在关联保存card时,会先插入外键为空的记录,然后再update外键和user关联,因此外键字段要设为允许null,否则会报错。