考慮以下父類實體:休眠產生曖昧的SQL查詢
@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實例,但不是ChildClass的實例。
我找遍四周,發現可以用這個標準來實現:
Criteria criteria = sessionFactory.getCurrentSession()
.createCriteria(ParentClass.class, "parentClass")
.add(Restrictions.eq("class", ParentClass.class));
然而,當我嘗試列出它,我得到以下錯誤:
ERROR SqlExceptionHelper:147 - ERROR: column reference "clazz_" is ambiguous
如果我刪除條件的最後一行,查詢成功執行。但是ChildClass實例也被返回,這不是我想要的。
這裏是由Hibernate生成的查詢時,我有所有的限制:
select this_.id as id1_29_1_, this_.name as name2_29_1_, this_.parent_id as parent_i1_14_1_, this_.clazz_ as clazz_1_, parentclas2_.id as id1_29_0_, parentclas2_.name as name2_29_0_, parentclas2_.parent_id as parent_i1_14_0_, parentclas2_.clazz_ as clazz_0_ from (select id, name, null::int4 as parent_id, 0 as clazz_ from iwrs.parent_class union all select id, name, parent_id, 1 as clazz_ from iwrs.child_class) this_ left outer join (select id, name, null::int4 as parent_id, 0 as clazz_ from iwrs.parent_class union all select id, name, parent_id, 1 as clazz_ from iwrs.child_class) parentclas2_ on this_.parent_id=parentclas2_.id where clazz_=?
工作示例可以在這裏找到:https://github.com/mmalmeida/hibernateTest,只需運行測試RetrieveParentTest.java。
你知道我該如何解決這個問題嗎?
提前致謝!
嘿malvarez,感謝您的輸入。不幸的是,它給出了同樣的錯誤。我也檢查了由hibernate生成的查詢,並且在兩種情況下都完全相同。 – micdcar
對不起,它沒有工作。你能用Hibernate生成的查詢更新你的問題嗎? – malvarez
當然,將這樣做;) – micdcar