Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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 左侧休眠条件排除联接_Java_Hibernate_Join_Hibernate Criteria - Fatal编程技术网

Java 左侧休眠条件排除联接

Java 左侧休眠条件排除联接,java,hibernate,join,hibernate-criteria,Java,Hibernate,Join,Hibernate Criteria,我不知道如何使用Hibernate标准来实现它 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{ ... // fi

我不知道如何使用Hibernate标准来实现它

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
}

所以我需要得到所有A的列表,这些A没有被B引用,以前没有尝试过,但类似的东西应该可以工作:

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();

只有一件事。DetachedCriterias子查询=DetachedCriterias.forClass(B.class).setProjection(Property.forName(“a.ID”)).add(Restrictions.isNotNull(“a.ID”);