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