假设我有一个父表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
}
}
将感激任何帮助,谢谢!
是啊!我把它修好了,以防有人想知道答案,我把解留在这里。也许你们会比我花更少的时间来解决同样的问题。因此,首先需要使用@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因为在我的情况下,我有不同的主键名也许它也能帮助别人。
就是这样!现在,当您持久化子实体时,它将创建两行—一行用于父表,另一行用于子表。