@ManyToOne & @OneToMany 带复合键

问题描述

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...