hibernate - 为什么休眠查询与关系触发父亲选择?
问题描述
我有一个关系为“oneToMany”的“父亲”类:
@Entity
@Table(name = "father")
Public class Father
{
Private String id;
Private Long a;
Private Long b;
@OneToMany(fetch=FetchType.Lazy,
mappedBy = 'father',
cascade = CascadeType.ALL)
Private List<Son> son;
}
具有关系“manyToOne”的“Son”类:
@Entity
@Table(name = "son")
Public class Son
{
Private String id;
Private Father father;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="id",referencedColumnName = "id", nullable = false, insertable = false, updatable = false)
Public Father getFather(){
return father;
}
}
在我的测试中,我想选择“父亲”,然后选择“儿子”,
选择“父亲”我需要从几个表中使用连接,然后我做一个 hql 查询
String sql = "select father.id, a.a, b.b"+
"from father father join a a on father.id=a.id"+
" join b b onb.id=a.id"+
" where a.id="123";
SQLQuery sqlQuery = session.createSQLQuery(sql).addScalar(...);
query.setParameter("id", "123");
query.list();
hql = "FROM SON WHERE ID =: id";
Query query = session.createQuery(hql);
query.setParameter("id", "123");
query.list(); \\ actually hibernate run select from son and after select from father
hibernate 做了“从儿子选择”,然后再次“从父亲选择” 。
我怎么能告诉hibernate我已经有了父亲,所以他不选择父亲本身?
解决方案
@ManyToOne 默认是 EAGERly 获取的。您应该添加 FetchType.Lazy 以避免选择。
@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.Lazy)