部分hibernate笔记

CGLIB要求被代理有类有一个无参的构造函数,所以用HIBERNATE定义BO时一定要有一个无参的构造函数

hibernate3的merge可以解决 一个session中有多个ID相同的对象 的问题

如果业务方法被transaction manager包住,那么,执行业务如在逻辑上发现不能进行CRUD操作,应该主动抛出异常,以使事务回滚 

如果要做一个线程不停地扫描数据库,不要让这个线程成为bean本身,而要让它查找bean

否则的话,如果线程代表的bean被改变了,线程也不会意识到这个变化。

hql的where子句中判断xx 是否为null 的写法是,  xx is(not) null

关于many-to-one属性值为CGLIB代理对象的问题

1.看清楚关键值,对症下药:

hibernate, many-to-one,enhancerBycglib, no session

2.是否将many-to-one 设置成lazy="true",如果是,请略过第3步

3.是否使用的是hibernate3,并且没有设置lazy属性?

4.是否在逻辑层管理session,但是在web层使用数据对象?

5.改成lazy=’false’..end.

6.是否将many-to-one 设置成lazy="falze",现象依旧?

7.检查数据库内的外键字段,因为可能没有体现many-to-one的外键了,而依据主动方引用的主键是不存在的..

8.建立外键.

9.依然没有解决…去下个hibernate_ref 仔细看看,你需要补充知识了

10.问题解决.

hibernate3连class本身的lazy都默认为proxy,所以最好将hibernate-mapping的default-lazy置为false

hibernate映射中的cascade与数据库的外键cascade完全不一样:

设A引用B,设置cascade="delete",是指当删除A时,hibernate自动为你删除B,

而在关系数据库中,为A对B的引用关系设置“级联删除”,是指当删除B时,数据库自动为你删除A

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.