Java 如何将JPA或Hibernate@JoinTable与SQL=>;等附加连接条件一起使用;从a.no=b.no或b.no上的联接b为空
我想使用JPA或Hibernate连接,SQL输出如下:Java 如何将JPA或Hibernate@JoinTable与SQL=>;等附加连接条件一起使用;从a.no=b.no或b.no上的联接b为空,java,mysql,jpa,Java,Mysql,Jpa,我想使用JPA或Hibernate连接,SQL输出如下: select * from a inner join b on a.no=b.MAIN_NO and (a.SN=b.SN or b.SN is null) and (a.SN_SUB=b.SN_SUB or b.SN_SUB is null) 但现在我的输出: select
select
*
from
a
inner join
b
on a.no=b.MAIN_NO
and (a.SN=b.SN or b.SN is null)
and (a.SN_SUB=b.SN_SUB or b.SN_SUB is null)
但现在我的输出:
select
*
from
a
inner join
b
on a.no=b.MAIN_NO
and a.SN=b.SN
and a.SN_SUB=b.SN_SUB
我的代码如下:
Entity
@Table(name = "contract")
public class Person {
@Id
@Column
private String no;
@Id
@Column
private String sn;
@Id
@Column
private String snSub;
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY)
@JoinTable(name = "Relation1,
joinColumns = {
@JoinColumn(name = "MAIN_NO" ,referencedColumnName="NO"),
@JoinColumn(name = "SN" ,referencedColumnName="SN"),
@JoinColumn(name = "SN_SUB" ,referencedColumnName="SN_SUB"),
},
inverseJoinColumns = {
@JoinColumn(name = "company_code" ,referencedColumnName="company_code"),
@JoinColumn(name = "lessor_no" ,referencedColumnName="lessor_no"),
}
)
@NotFound(action = NotFoundAction.IGNORE)
private List<Relation2> relations;
//Getters and setters
}
实体
@表(name=“合同”)
公共阶层人士{
@身份证
@纵队
私人字符串编号;
@身份证
@纵队
私有字符串序列号;
@身份证
@纵队
私有字符串snSub;
@杰索尼奥雷
@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name=“Relation1,
joinColumns={
@JoinColumn(name=“MAIN\u NO”,referencedColumnName=“NO”),
@JoinColumn(name=“SN”,referencedColumnName=“SN”),
@JoinColumn(name=“SN\u SUB”,referencedColumnName=“SN\u SUB”),
},
反向连接列={
@JoinColumn(name=“公司代码”,referencedColumnName=“公司代码”),
@JoinColumn(name=“出租人编号”,referencedColumnName=“出租人编号”),
}
)
@NotFound(action=NotFoundAction.IGNORE)
私人名单关系;
//接球手和接球手
}
表Relation1是一个SQL视图表
但关系2并非如此
在合同表sn not null和Relation1表sn可能有null,但我仍然必须加入
如何使用JPA或Hibernate来满足需要
谢谢。您描述的“额外加入条件”与加入无关
它们是描述where子句的语法速记。
仅基于匹配的外键和私钥联接表
将条件放在where子句中,它们所属的位置。如果要在一个表具有空值的位置进行连接,这是外部连接而不是内部连接的示例。