我经常会遇到这种情况:
实体A通过1--1关系连接到B,
在代码中,我经常只使用A. *和A.getB()。getId(),我从不使用B()的任何其他属性, 因为B的Id实际上已经存储在表A中,所以我不一定要加载 B表,但是当看到getB()时,hibernate总是创建一个JOIN或后面的SELECT。 如果B表很大,或者它有自己的关联
,这是一个很大的问题有没有办法优化这个特殊用例?
由于 杨
答案 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"在你班级的标签中