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。为此,请使用即时抓取。