【发布时间】:2020-08-17 04:42:35
【问题描述】:
考虑到 JPA 涉及的复杂性,我们计划将 Spring Data JDBC 用于我们的实体,因为它很简单。以下是示例结构,我们最多有 6 个子实体。我们能够通过适当的外键映射成功地将数据插入到这些实体中。
挑战:- 我们在此应用程序之外有一个工作流程,它会定期更新“请求”实体中的“请求状态”,这是创建请求后唯一更新的字段。与 Spring Data JDBC 一样,在更新期间它会删除所有引用的实体并再次重新创建(插入)它。考虑到 6 个子实体,这是一种繁重的操作。在如何处理这些情况方面有任何解决方法或建议
@Table("Request")
public class Request {
private String requestId; // generated in the Before Save Listener .
private String requestStatus;
@Column("requestId")
private ChildEntity1 childEntity1;
public void addChildEntity1(ChildEntity1 childEntityobj) {
this.childEntity1 = childEntityobj;
}
}
@Table("Child_Entity1")
public class ChildEntity1 {
private String entity1Id; // Auto increment on DB
private String name;
private String SSN;
private String requestId;
@MappedCollection(column = "entity1Id", keyColumn = "entity2Id")
private ArrayList<ChildEntity2> childEntity2List = new ArrayList<ChildEntity2>();
@MappedCollection(column = "entity1Id", keyColumn = "entity3Id")
private ArrayList<ChildEntity3> childEntity3List = new ArrayList<ChildEntity3>();
public void addChildEntity2(ChildEntity2 childEntity2obj) {
childEntity2List.add(childEntity2obj);
}
public void addChildEntity3(ChildEntity3 childEntity3obj) {
childEntity3List.add(childEntity3obj);
}
}
@Table("Child_Entity2")
public class ChildEntity2 {
private String entity2Id; // Auto increment on DB
private String partyTypeCode;
private String requestId;
}
@Table(Child_Entity3)
public class ChildEntity3 {
private String entity3Id; // Auto increment on DB
private String PhoneCode;
private String requestId;
}
@Test
public void createandsaveRequest() {
Request newRequest = createRequest(); // using builder to build the object
newRequest.addChildEntity1(createChildEntity1());
newRequest.getChildEntity1().addChildEntity2(createChildEntity2());
newRequest.getChildEntity1().addChildEntity3(createChildEntity3());
requestRepository.save(newRequest);
}
【问题讨论】:
-
大家好,这是我在 SO 中的第一篇文章。如果我需要更清楚地说明问题,请告诉我。回到我的问题,因为只有一列被更新,现在我已经使用 @Query() 直接触发 UPDATE 查询,但这没有再次触发删除和插入。也就是说,如果这是正确的方法或有任何解决方法,我确实希望得到您的反馈。感谢您的回复。
标签: spring-boot spring-data spring-data-jdbc