Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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 如何将JPA或Hibernate@JoinTable与SQL=>;等附加连接条件一起使用;从a.no=b.no或b.no上的联接b为空_Java_Mysql_Jpa - Fatal编程技术网

Java 如何将JPA或Hibernate@JoinTable与SQL=>;等附加连接条件一起使用;从a.no=b.no或b.no上的联接b为空

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

我想使用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
        *
    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子句中,它们所属的位置。

如果要在一个表具有空值的位置进行连接,这是外部连接而不是内部连接的示例。