Java 如何在将自定义接口定义为JpaRepository时指定复合主键?
我有两个实体类,具有以下属性:Java 如何在将自定义接口定义为JpaRepository时指定复合主键?,java,spring,spring-boot,jpa,spring-data-jpa,Java,Spring,Spring Boot,Jpa,Spring Data Jpa,我有两个实体类,具有以下属性: class Parent { @Id string columnA; string columnB; } class Child { //confused here: ManyToOne with Parent class string columnC; string columnD; } 我希望SQL表如下所示: 父列主键,列B 子ColumnaForeive键,columnC,columnD其中, 主键=
class Parent {
@Id
string columnA;
string columnB;
}
class Child {
//confused here: ManyToOne with Parent class
string columnC;
string columnD;
}
我希望SQL表如下所示:
父列主键,列B
子ColumnaForeive键,columnC,columnD其中,
主键=columnA、columnC和,
子->多工单->父关系。
问题1:如何为子级创建正确的实体类
问题2:我想要一个扩展JpaRepository的childRepository接口。我很困惑,如何指定复合主键
public interface childRepository extends JpaRepository<Child, 'What to write here?'>{
}
问题1:这取决于您的业务逻辑。 问题2:创建新类以存储子实体的ID
@Embeddable
public class ChildId implements Serializable{
private String columnA;
private String columnC;
// getters and setters
}
在您的儿童班:
@EmbeddedId
private ChildId childId;
@MapsId(value = "columnA")
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "columnA")
private Parent parent;
在您的儿童知识库中:
public interface ChildRepository extends JpaRepository<Child, ChildId>{}
PS:您可以根据业务逻辑应用其他方法每当我保存父实体时,子实体也应该被保存。此外,每当我获取父实体时,子实体也应该存在于其中。这可能吗。在@OneToManycascade=CascadeType中的父实体端使用级联。所有搜索其他级联类型:持久、合并、分离、刷新、删除2。为此,请使用即时抓取。