我有 JPA 解决方案,但我不喜欢我必须在 @ManyToOne 中设置 @OneToMany 实体而不自动为我保存它的方式...@ManyToOne 实体使用 @OneToMany 实体作为复合键:
父类 ID:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Embeddable
public class ClassAId implements Serializable {
private String branch;
private String version;
}
父类:
@Entity
@Data
public class ClassA{
@EmbeddedId
private ClassAId id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "id.classA", fetch = FetchType.EAGER)
private List<ClassB> children;
}
子类 ID:
@Embeddable
@Data
@AllArgsConstructor
@NoArgsConstructor
public Class ClassBId implements Serializable{
@ManyToOne(fetch = FetchType.LAZY)
private ClassA classA;
private String name;
}
子类:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class ClassB{
@EmbeddedId
private ClassBId id;
}
当我使用 CrudRepository 接口来保存它时,我希望我能做到这一点:
ClassA a = new ClassA();
a.setId(new ClassAId("myBranch","myVersion"));
a.setChildren(Arrays.toList(new ClassB(new ClassBId(null, "myName"))));
repository.save(a);
相反,我需要这样做,因为 ClassBId 中的 ClassA 不能为空:
ClassA a = new ClassA();
a.setId(new ClassAId("myBranch","myVersion"));
a.setChildren(Arrays.toList(new ClassB(new ClassBId(a, "myName"))));
repository.save(a);
我希望 spring JPA 会为我做这件事。是更清洁的解决方案吗?请记住,这只是一个抽象的例子。 ClassB会有子类列表,我只是想看看是否有其他方法?