簡體   English   中英

為什么在一對一關系的情況下,Hibernate會進行內部聯接?

[英]Why does Hibernate put inner join in the case of one-to-one relationship?

我有兩個實體: 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
}

Partner伙伴的班級

@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

LEFT OUTER JOIN在這里不合適,因為unsubscribed_partner表可能不是partner表中的任何伙伴,因此我需要LEFT OUTER JOIN 我該如何解決?

文檔指出, 使用 CriteriaSpecification.INNER_JOIN for the joinTypecreateCriteria(String, String)功能上等效於 createCriteria(String, String, int)

因此,請嘗試使用createCriteria("unsubscribedPartner", "unsbcr", CriteriaSpecification.LEFT_JOIN)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM