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”)
。没问题,很高兴它有帮助,