Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate不在联接表的子查询中_Java_Sql_Hibernate - Fatal编程技术网

Java Hibernate不在联接表的子查询中

Java Hibernate不在联接表的子查询中,java,sql,hibernate,Java,Sql,Hibernate,我正在尝试在hibernate中执行类似以下sql查询的查询: 选择phone.*从phone WHERE phone.id不在中的phone中选择phone\u id FROM user\u phone 我有以下实体类: @Entity class User { @Id private Integer id; @ManyToMany private Set<Phone> phoneList; } Hibernate会自动创建一个名为user\u

我正在尝试在hibernate中执行类似以下sql查询的查询:

选择phone.*从phone WHERE phone.id不在中的phone中选择phone\u id FROM user\u phone

我有以下实体类:

@Entity
class User {
    @Id
    private Integer id;

    @ManyToMany
    private Set<Phone> phoneList;

}
Hibernate会自动创建一个名为user\u phone的连接表。现在我想选择所有没有被任何用户使用的手机。我就是想不出用Hibernate怎么做。我试过以下方法:

Session session = (Session) entityManager.getDelegate();
Criteria criteria = session.createCriteria(Phone.class);

DetachedCriteria subCriteria = DetachedCriteria.forClass(User.class);
subCriteria.setProjection(Property.forName("phoneList"));

criteria.add(Subqueries.propertyNotIn("id", subCriteria))
但它返回的所有用户的id与任何手机的id都不相同。所以这不是我想要的


有人知道如何做到这一点吗?

既然我来到这里是为了寻找如何形成子查询而不是条件,我想知道其他人是否也会以同样的方式结束这里

Criteria criteria = session.createCriteria(Phone.class)
    .add(Subqueries.propertyNotIn("id", DetachedCriteria.forClass(User.class)
        .createAlias("phoneList", "phone")
        .setProjection(Property.forName("phone.id"))
    ));
因为我知道了如何在HQL中编写查询,所以我想分享解决方案,以防万一:

从电话p,其中p.id不在中从用户u选择ph.id加入u.phoneList ph

在一个类似的场景中为我工作。希望有帮助

Criteria criteria = session.createCriteria(Phone.class)
    .add(Subqueries.propertyNotIn("id", DetachedCriteria.forClass(User.class)
        .createAlias("phoneList", "phone")
        .setProjection(Property.forName("phone.id"))
    ));