读书人

Hibernate 多对一联系关系配置

发布时间: 2012-11-08 08:48:11 作者: rapoo

Hibernate 多对一关联配置
实体是Employee和Department,它们之间是多对一的关系。

Department类:



Employee.hbm.xml:

many-to-one没有inverse属性,因为关系的维护是many的一方,不可能放弃对关系的维护。
many-to-one的lazy属性有三个取值:false, proxy, no-proxy。

1. 测试cascade属性:


2. 测试fetch

Session s = null;s = HibernateUtil.getSession();Employee em = (Employee) s.get(Employee.class, 2);s.close();System.out.println(em.getName());System.out.println(em.getDepartment());

结果是报org.hibernate.LazyInitializationException异常。
因为fetch为select,而且lazy为proxy或者no-proxy,所以开始仅仅查询Employee,当需要用SELECT语句查询Department时,Session已经关闭。
解决办法:
1. 设置lazy为false,hibernate会第一时间把Employee和Department查询出来。
如果fetch为select,使用两个SELECT查询语句
如果fetch为join,使用一个SELECT连表查询语句
2. 设置fetch为join,这时不管lazy的取值,hibernate会进行连表查询,把两个实体都查询出来

读书人网 >软件架构设计

热点推荐