Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
使用相似的ID在Spring Boot中连接两个没有外键的表_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

使用相似的ID在Spring Boot中连接两个没有外键的表

使用相似的ID在Spring Boot中连接两个没有外键的表,spring,spring-boot,spring-data-jpa,Spring,Spring Boot,Spring Data Jpa,这里有两张桌子;两者都有ID作为主键。我想知道如何根据这些表的ID在没有外键的情况下连接它们。服务实现应该是什么,存储库应该是什么?如何使用连接编写@Query @Entity @Table(name = "procedures") @JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" }) public class Procedure implements Serializable { private static

这里有两张桌子;两者都有ID作为主键。我想知道如何根据这些表的ID在没有外键的情况下连接它们。服务实现应该是什么,存储库应该是什么?如何使用
连接编写
@Query

@Entity
@Table(name = "procedures")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class Procedure implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ProcedureId")
    private int id;

    @Column(name = "ProcedureName")
    private String name;
    @Column(name = "ProcedureCode")
    private String code;

    @Column(name = "ProcedureDesc")
    private String desc;
//  getters and setters
}

您可以像在SQL中一样使用JOIN on语法

比如说

select p from Procedure p join CPTClinicianDescriptor c on c.id = p.id;
请在此处阅读有关该主题的更多信息:

考虑到它是一对一的关系,您可以使用这样的方法

@Entity
@Table(name = "procedures")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class Procedure implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ProcedureId")
    private int id;

    @Column(name = "ProcedureName")
    private String name;
    @Column(name = "ProcedureCode")
    private String code;

    @OneToOne(optional = false)
    @JoinColumn(name = "id", updatable = false, insertable = false)
    private CPTClinicianDescriptor  descriptor;

    @Column(name = "ProcedureDesc")
    private String desc;
//  getters and setters
}

你为什么不想用外键呢?另外:
ProcedureCode
CPTCode
对我来说就像是自然的主键,所以你应该考虑不要使用代理
id
列。我得到结果了。谢谢,如果我想从其他表中获得,我可以再添加一个
@JoinColumn
,对吗?@RaviChandraT是的,你可以添加多个。谢谢,我怀疑我是否有映射表(CPTProcess)上面提到的程序和ClinicianDesc的外键,没有在程序中添加
@JoinColumn
,我可以用ClinicianDesc获得程序列表吗?我想为程序控制器而不是为该CPTProces编写列表当我在打印
p
时,它只打印程序列表不与CPTClinicianDescriptor组合
@Entity
@Table(name = "procedures")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class Procedure implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ProcedureId")
    private int id;

    @Column(name = "ProcedureName")
    private String name;
    @Column(name = "ProcedureCode")
    private String code;

    @OneToOne(optional = false)
    @JoinColumn(name = "id", updatable = false, insertable = false)
    private CPTClinicianDescriptor  descriptor;

    @Column(name = "ProcedureDesc")
    private String desc;
//  getters and setters
}