@ManyToOne & @OneToMany 带复合键

时间:2021-02-16 08:59:51

标签: spring-data-jpa spring-data one-to-many many-to-one

我有 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会有子类列表,我只是想看看是否有其他方法?

0 个答案:

没有答案