首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于Hibernate加载数据时的CGLIB动态代理的奇怪有关问题

2012-10-24 
关于Hibernate加载数据时的CGLIB动态代理的奇怪问题。有三个类,分别对应三个表ComAuthPermissionDO、ComAuth

关于Hibernate加载数据时的CGLIB动态代理的奇怪问题。

有三个类,分别对应三个表ComAuthPermissionDO、ComAuthOperationDO、ComAuthEntityDO

三个表的关系是:ComAuthPermissionDO分别引用了ComAuthOperationDO、ComAuthEntityDO,即分别跟这两个表形成@ManyToOne关系。

在查询ComAuthPermissionDO,可以联级查到ComAuthOperationDO、ComAuthEntityDO,但非常奇怪,我查出来之后,发现ComAuthOperationDO的equals()方法总是返回false,最后发现,是equals方法在对比两个类的Class时候返回false。于是打印了联级查询的这两个实例的Class:

=============.>>CLass:? com.xx.component.authorization.model.ComAuthOperationDO$$EnhancerByCGLIB$$86a21bfb
=============.>>CLass:? com.xx.component.authorization.model.ComAuthEntityDO

为什么Hibernate加载ComAuthOperationDO实例时用来CGLIB动态代理,而加载ComAuthEntityDO时却正常呢?

请解答。。。谢谢!

1 楼 pikachu 2007-09-29   一般来说,需要lazy的就会被cglib,
不需要lazy的就用原来的。
转新手! 2 楼 johnnylzb 2007-09-29   pikachu 写道一般来说,需要lazy的就会被cglib,
不需要lazy的就用原来的。
转新手!谢谢,但相当奇怪,我查看过Annotation,两个类都设置为LAZY,但为什么ComAuthEntityDO没有使用CGLIB呢? 3 楼 antonyup_2006 2007-10-25   动态代理机制常用有有两种技术:
一个是cglib (class)
还有一个是java dynamic proxy(interface)

你的ComAuthEntityDO是否实现了interface?

热点排行