Java JPQL-许多自参考

Java JPQL-许多自参考,java,sql,jpa,playframework,jpql,Java,Sql,Jpa,Playframework,Jpql,我在使用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) pub

我在使用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;

}
或 从itemsRelated为空的项目中选择*

但它却抛出了这样一个例外:

play.exceptions.JavaExecutionException:从Item where ItemsRelate=null order by createDate desc执行查询时出错:'where子句'中的未知列'qualified' atplay.mvc.ActionInvoker.invoke(ActionInvoker.java:237) 在Invocation.HTTP请求时(播放!)

有人能帮我吗

更新:

Java调用:

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

此时,“查询”有“itemsRelated is null”

我不是jpql专家,但语法
为null
不为null
应该可以工作。 你试过了吗

Select * from Item where itemsRelated is null

itemsRelated
是一个集合,您必须检查集合的大小-不要期望它为
null
。试一试

select i from Item i where i.itemsRelated is empty

编辑:使用别名完成查询

成功

解决方案是使用内部连接,让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)

谢谢大家

可以用select语句发布java代码段吗?现在错误:itemsRelated未映射[来自models.aquilesModels.entity.Item,其中itemsRelated不是空的order by createDate desc]
Select * from Item where id NOT IN (SELECT DISTINCT(i.id) FROM Item i INNER JOIN i.itemsRelated ii)