簡體   English   中英

Hibernate生成模棱兩可的SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM