Hibernate 的EnhancerByCGLIB 和 javassist 是什么意思

seashoreblue 2012-03-21 03:29:53
如题,关于hibernate的lazy, 在调试时,查看对象的值,假定该对象有包含一个 User 类的实例,那么在eclipse 的 Variables 窗口中会看到 user=User_$$_javassist_12。
后来又开发另一个项目,同样在调试时,查看对象的值,假定该对象有包含一个 User 类的实例,那么在eclipse 的 Variables 窗口中会看到 user=User$$EnhancerByCGLIB$$b2a2bef1。

我不明白的是,同样是使用hibernate 的 lazy 为什么这里会出现不一样的地方,它们各有什么特点?望高手指点。
...全文
851 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
seashoreblue 2012-03-21
  • 打赏
  • 举报
回复
那么还有一个问题,假设有一个pojo Customer:
class Customer{
private Long id;
private User user;
//getter,setter
}
在新增 Customer 时,User 已经存在了,那么
Customer customer = new Customer();
User user = new User();
user.setId(1);//假设id为1的user已经存在于数据库中
customer.setUser(user);
dao.save(customer);
执行上面几行,有些项目中是可以的,而在其它地方却报 references a transient object 的异常。不知是哪里的配置导致了这样的差别?
seashoreblue 2012-03-21
  • 打赏
  • 举报
回复
自己回复:原来是hibernate版本不同的原因,说hibernate3.3以前的版本使用的字节码增强方式是cglib,而3.3就使用javassist了。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧