hibernate getAssocation()。getId()的积极优化?

时间:2011-12-15 20:12:49

标签: hibernate optimization lazy-loading

我经常会遇到这种情况:

实体A通过1--1关系连接到B,

在代码中,我经常只使用A. *和A.getB()。getId(),我从不使用B()的任何其他属性, 因为B的Id实际上已经存储在表A中,所以我不一定要加载 B表,但是当看到getB()时,hibernate总是创建一个JOIN或后面的SELECT。 如果B表很大,或者它有自己的关联

,这是一个很大的问题

有没有办法优化这个特殊用例?

由于 杨

2 个答案:

答案 0 :(得分:1)

我不认为这是可能的,因为Hibernate不知道getId()方法的作用:它可能只返回ID(在99%的情况下可能就是这种情况),但它也可以转换它,有一些副作用,在某处记录一些消息,无论如何。

我不是很确定,但我认为您可以将表A中的B_ID列映射为基本列(除了将其映射为连接列之外),前提是您将列标记为不可插入且非更新。如果我是正确的,你可以调用a.getBId()来获取B的ID而不加入延迟加载B.

答案 1 :(得分:1)

Hibernate one-to-one: getId() without fetching entire object

http://javaprogrammingtips4u.blogspot.com/2010/04/field-versus-property-access-in.html

基本上你需要将注释放在getId()而不是私有的Integer Id。

就xml映射文件而言,你只需要将access =" property"在你班级的标签中