Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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_Hibernate - Fatal编程技术网

Java 为什么Hibernate在一对一的关系中使用内部连接?

Java 为什么Hibernate在一对一的关系中使用内部连接?,java,hibernate,Java,Hibernate,我有两个实体: UnsubscribedPartner用于从邮件合作伙伴处取消订阅 @Entity @Table(schema = "mailing", name = "unsubscribed_partner") public class UnsubscribedPartner { @Id @Column(name = "partner_id") private int partnerId; @Column(name = "unsubscription_da

我有两个实体:
UnsubscribedPartner
用于从邮件合作伙伴处取消订阅

@Entity
@Table(schema = "mailing", name = "unsubscribed_partner")
public class UnsubscribedPartner {

    @Id
    @Column(name = "partner_id")
    private int partnerId;

    @Column(name = "unsubscription_date")
    private Date date;

    @OneToOne(targetEntity = Partner.class, fetch = FetchType.EAGER)
    @JoinColumn(name = "partner_id")
    private Partner partner;

    //GET, SET
}
合作伙伴
合作伙伴的职业

@Entity
@Table(schema = "partner", name = "partner")
public class Partner {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "email")
    private String email;

    @OneToOne(fetch = FetchType.EAGER, mappedBy = "partner")
    private UnsubscribedPartner unsubscribedPartner;

    //GET, SET
}
我构造了以下条件查询:

String email;
//...
Criteria criteria = getSession().createCriteria(Partner.class);
if(!(email == null)){
    criteria.add(Restrictions.eq("email", email));
}
Criteria unsubscribedCrieria = criteria.createCriteria("unsubscribedPartner", "unsbcr");
unsubscribedCrieria.add(Restrictions.isNull("unsbcr.reason"));
但是SQL查询的结果是

    select
        count(*) as y0_ 
    from
        partner.partner this_ 
    inner join
        mailing.unsubscribed_partner unsbcr1_ 
            on this_.id=unsbcr1_.partner_id 
    where
        unsbcr1_.unsubscription_reason_id is null
这里不适合使用内部联接,因为
取消订阅的\u partner
表可能不包含
partner
表中的任何partner,因此我需要
左外部联接
。如何修复此问题?

使用joinType的
CriteriaSpecification.INNER\u JOIN在功能上等同于
createCriteria(String,String)


因此,请尝试使用
createCriteria(“取消订阅合作伙伴”、“unsbcr”、CriteriaSpecification.LEFT_JOIN”)

没问题,很高兴它有帮助,