[英]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 joinType
, createCriteria(String, String)
在功能上等效於 createCriteria(String, String, int)
。
因此,請嘗試使用createCriteria("unsubscribedPartner", "unsbcr", CriteriaSpecification.LEFT_JOIN)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.