簡體   English   中英

hibernate createAlias with子句生成錯誤的查詢

[英]hibernate createAlias with clause generates wrong query

我有以下表格:A:id B:id,文本AB:aID,bID

我想joib A和B,其中B.text包含單詞'cat'。

這是我做的hibernate查詢:

Criteria c = session.createCriteria(TableA.class, "A");
c.createAlias("A.bs", "B", JoinType.INNER_JOIN, Restrictions.like("b.text", "%cat%"));
c.setProjection(Projections.property("id"));

生成的查詢是:

Select id 
FROM A a
INNER JOIN AB ab ON a.id=ab.aID AND (b.text like ?)
INNER JOIN B b ON b.id=ab.bID AND (b.text like ?)

出於某種原因AND (b.text like ?)出現在兩個內部聯接中。 據我所知,它應該只是在第二個。 這會導致以下異常:

java.sql.SQLException: No value specified for parameter 2

我猜它正在發生,因為它只有一個參數和兩個'?'。

我錯過了什么?

編輯:

添加持久化類:

@Entity
@Table(name="A")
Class A {

    @Id
    @Column(name="id", length=255)
    protected String id;

    @OneToMany
    @JoinTable(name="AB", joinColumns = @JoinColumn( name="aID"), inverseJoinColumns = @JoinColumn( name="bID"))
    @LazyCollection(LazyCollectionOption.FALSE)
    protected List<B> bs;

}

@Entity
@Table(name="B")
Class B {

    @Id
    @Column(name="id", length=255)
    protected String id;

    @Column(name="text", length=255)
    protected String text;

}

我認為你需要創建一個別名

c.createAlias("A.bs", "b", JoinType.INNER_JOIN, Restrictions.like("b.text", "%cat%"));

更新

我認為這是一個Hibernate錯誤。 您可以通過在where子句中使用限制來修復它

 c.createAlias("A.bs", "b", JoinType.INNER_JOIN);
 c.add(Restrictions.like("b.text", "%cat%"));

或者不使用連接表並在B中通過外鍵進行關聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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