Hibernate 多对一映射:
关联映射本质:
*将关联关系映射到数据库。所谓关联关系就是对象模型在内存中的一个或者多个引用。
Many-to-one:
*在多的一段加上一个外键指向一的一端。
理解级联的含义:
*是对象的连锁反应。
User映射关系配置:
<hibernate-mapping>
<class name="com.bjsxt.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!--
<many-to-one name="group" column="groupid" cascade="all"/>
-->
<many-to-one name="group" column="groupid"/>
</class>
</hibernate-mapping>
存储_例子1:
session.beginTransaction();
Group group = new Group();
group.setName("尚学堂");
User user1 = new User();
user1.setName("菜10");
user1.setGroup(group);
User user2 = new User();
user2.setName("容祖儿");
user2.setGroup(group);
//不能成功保存,抛出TransientObjectException异常
//因为还没有保存Group,此时为Transient状态,oid没有分配值
//persistent状态的对象是不能引用transient状态的对象的
//关联关系配置中cascade =‘none’
session.save(user1);
session.save(user2);
session.getTransaction().commit();
存储_例子2:
session.beginTransaction();
Group group = new Group();
group.setName("尚学堂");
//此时已保存到数据库中,变成persistent状态,但是在数据库中查不到,跟数据库的隔离级别有关系。
session.save(group);
User user1 = new User();
user1.setName("菜10");
user1.setGroup(group);
User user2 = new User();
user2.setName("容祖儿");
user2.setGroup(group);
//可以正确存储
session.save(user1);
session.save(user2);
session.getTransaction().commit();
当cascade != ‘none‘时,是级联操作,在存user1时会先把group存了。