使用相似的ID在Spring Boot中连接两个没有外键的表
这里有两张桌子;两者都有ID作为主键。我想知道如何根据这些表的ID在没有外键的情况下连接它们。服务实现应该是什么,存储库应该是什么?如何使用使用相似的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
连接编写@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
}