[英]Hibernate generates ambiguous SQL query
考慮以下ParentClass實體:
@Entity
@Table(schema = "iwrs")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class ParentClass {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PK_IWRS")
public int id;
public String name;
public ParentClass(String name) {
this.name = name;
}
}
以及以下ChildClass實體:
@Entity
@Table(schema = "iwrs")
public class ChildClass extends ParentClass {
@ManyToOne(targetEntity=ParentClass.class)
@JoinColumn(name="parent_id")
private ParentClass parent;
public ChildClass(String name) {
super(name);
}
}
如您所見,此ChildClass繼承自ParentClass。 此外,它包含在父字段中映射的ParentClass的引用。
有一點我想獲取ParentClass的所有實例,而不是ChildClass的實例。
我四處搜尋,發現可以通過以下條件實現:
Criteria criteria = sessionFactory.getCurrentSession()
.createCriteria(ParentClass.class, "parentClass")
.add(Restrictions.eq("class", ParentClass.class));
但是,當我嘗試列出它時,出現以下錯誤:
錯誤SqlExceptionHelper:147-錯誤:列引用“ clazz_”不明確
如果刪除條件的最后一行,則查詢將成功執行。 但是還會返回ChildClass實例,這不是我想要的。
當我有所有限制時,這是由休眠生成的查詢:
選擇this_.id作為id1_29_1_,this_.name作為name2_29_1_,this_.parent_id作為parent_i1_14_1_,this_.clazz_作為clazz_1_,parentclas2_.id作為id1_29_0_,parentclas2_.name作為name2_29_0_,parentclas2_.parent_id從parent_i_14作為父母_i1。選擇id,name,null :: int4作為parent_id,從iwrs.parent_class聯合中選擇0作為clazz_,都從idrs.child_class中選擇id,name,parent_id,作為clazz_)this_左外部聯接(選擇id,name,null :: int4作為parent_id,0作為來自iwrs.parent_class聯合的clazz_都選擇id,名稱,parent_id,1作為來自iwrs.child_class的clazz_)this_.parent_id = parentclas2_.id上的parentclas2_其中clazz_ =?
此處提供工作示例: https : //github.com/mmalmeida/hibernateTest ,只需運行測試RetrieveParentTest.java。
您知道我如何解決這個問題嗎?
提前致謝!
嘗試使用您定義的別名:
Criteria criteria = sessionFactory.getCurrentSession()
.createCriteria(ParentClass.class, "parentClass")
.add(Restrictions.eq("parentClass.class", ParentClass.class));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.