java - 不包括 JOIN 的 Hibernate 条件

标签 java hibernate join hibernate-criteria

我不知道如何使用 Hibernate Criteria 来做到这一点

SELECT * 
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL

有类似Hibernate的映射

@Entity
class A{

    @Id
    @Column(name = "ID")
    private String ID;

    ... // fields
}

@Entity
class B{
    ... // fields

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "A_ID", referencedColumnName = "ID")
    @Cascade(CascadeType.DETACH)
    private A a;

    ... // fields
}

所以我需要获取所有未被 B 引用的 A 的列表

最佳答案

以前没试过,但是像这样的东西应该有用:

select * from Table_A a
where a not in (
   select b.a from Table_B b )

这当然是在HQL中

条件可能如下所示:

DetachedCriteria subquery = DetachedCriteria.forClass(B.class)
.setProjection( Property.forName("a.ID") )
.add(Restrictions.isNotNull("a.ID"));

session.createCriteria(A.class)
.add ( Property.forName("ID").notIn(subquery) )
.list();

关于java - 不包括 JOIN 的 Hibernate 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20611423/

相关文章:

java - 来自不同类节点的链表

java - JPA CreateEntityManagerFactory() 方法挂起

java - Spring Data REST @ExceptionHandler

java - Spring + Hibernate 无法确定类型 Set

mysql - MySQL 中的 LEFT OUTER JOIN 与 SUBSELECT

连接时可能带有空值的 MySQL 查询

java - 使用 toString 逐行打印到文本文件

java - 三级嵌套循环查询不会运行外循环

java - 如何访问Java LinkedList节点的私有(private)字段?

Mysql通过表查询