我正在尝试使用MariaDB和Java中的Hibernate实现配置数据库。让A成为可以拥有B个许可证的人。每个许可证b都包含一个C列表(一个包含字符串和一个int的对象)。
class A {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "b_id")
List<B> bs;
}
class B {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "b_id")
private long id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "c_id")
List<C> bs;
}
class C {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "c_id")
private long id;
String blabla;
int i;
}
我可以保存它,但是在重新保存更改后的A时,如果不保留冗余字段就无法更新它(从数据库加载A->将B添加到A的Bs中/将C添加到B的Cs->保存->冗余字段保留在数据库中。
执行此操作的正确方法是什么? 到目前为止,我尝试使用@ ElementCollection,CascadeType.persist和orphanRemoval = true时没有运气。
答案 0 :(得分:0)
在@JoinColumn中添加可更新的false,因此在保存父表时不会更改子表
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "b_id",updatable=false)
List<B> bs;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "c_id",updatable=false)
List<C> bs;