簡體   English   中英

JPQL-ManyToMany自我參考

[英]JPQL - ManyToMany Self reference

我在用JPQL進行查詢時遇到問題。 我有一張桌子供許多人參考:

@Entity
@Table(name = "item")
public class Item  extends BaseModel implements Serializable {
    @Column(name = "id")
    public INteger id;

    @ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
    public Set<Item> itemsRelated;

}

我正在嘗試進行以下查詢:

Select * from Item where  itemsRelated=null

或從itemRelated為null的項目中選擇*

但是它拋出了這個異常:

play.exceptions.JavaExecutionException: 從Item執行查詢時出錯, 其中itemRelated = null order by createDate desc :在Invocation.HTTP處play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)的“ where子句”中的未知列“ qualified”請求(玩!)

誰能幫我?

更新:

Java調用:

Item.find(query.toString()+" order by createDate desc").fetch(page, itemsPerPage);

此時,“查詢”具有“ itemsRelated為空”

itemsRelated是一個集合,您必須檢查集合的大小-不要期望它為null 嘗試

select i from Item i where i.itemsRelated is empty

參見http://docs.oracle.com/cd/E17904_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_empty_comp

編輯:使用別名完成查詢

我不是jpql專家,但是語法is null ,但is not null應該可以。 你有沒有嘗試過

Select * from Item where itemsRelated is null

http://docs.oracle.com/cd/E17904_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_null

成功了!

解決方案是使用INNER JOIN,讓我們:

id NOT IN (SELECT DISTINCT(i.id) FROM Item i INNER JOIN i.itemsRelated ii)

結果是:

Select * from Item where id NOT IN (SELECT DISTINCT(i.id) FROM Item i INNER JOIN i.itemsRelated ii)

謝謝大家!

暫無
暫無

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

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