假设我有一个父表A和一个子表B,它们有一个连接A.id和B.id的外键,问题是这个父表和最近创建的FK并且有太多的地方持久化子表,所以我正在等待一种简单的方法来持久保存父表并将其链接到子表。是否可以使用Hibernate仪器处理此任务?我试图使用级联但没有成功,看起来它们只有在我们坚持父实体时才有效。
所以结构如下:
@Entity
class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "a_id")
long id;
}
@Entity
class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "b_id")
long id; // FK to a_id
}
class BDao {
void store(B b) {
session.save(b); // to many places
}
}
欢迎任何帮助,谢谢!
答案 0 :(得分:0)
呀!我已经修好了,以防万一有人想知道我在这里留下解决方案的答案。也许你们会花更少的时间来解决同样的问题。 首先,您需要使用@Inheritance(strategy = InheritanceType.JOINED)注释来描述父实体:
@Entity
@Inheritance(strategy= InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name = "a_id")
public class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "a_id")
protected Integer id;
}
然后描述像
这样的子实体@Entity
@AssociationOverride(name="a_id", joinColumns = @JoinColumn(name="b_id"))
@PrimaryKeyJoinColumn(name = "b_id")
public class B extends A {
...
}
我已离开@AssociationOverride,因为在我的情况下,我有不同的主键名称,所以也许它对某人也有帮助。
就是这样!现在,当您持久保存子实体时,它将创建两行 - 一行用于父表,一行用于子表。