我在使用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
或 从项目中选择*,其中itemsRelated为空
但它引发了这个例外:
play.exceptions.JavaExecutionException:从Item中执行查询时出错,其中itemsRelated = null order by createDate desc :未知列&#39; qualified&#39;在&#39; where子句&#39; at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237) 在Invocation.HTTP请求(播放!)
任何人都可以帮助我吗?
更新:
Java调用:
Item.find(query.toString()+" order by createDate desc").fetch(page, itemsPerPage);
此时&#34;查询&#34;已经&#34; itemsRelated为null&#34;
答案 0 :(得分:1)
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
修改:带别名的已完成查询
答案 1 :(得分:0)
我不是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
答案 2 :(得分:0)
成功!
解决方案是使用INNER JOIN,让se:
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)
谢谢大家!