Hibernate:是否有可能只持有一个会导致父母持久化的孩子

时间:2013-06-06 15:16:02

标签: java hibernate

假设我有一个父表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
}
}

欢迎任何帮助,谢谢!

1 个答案:

答案 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,因为在我的情况下,我有不同的主键名称,所以也许它对某人也有帮助。

就是这样!现在,当您持久保存子实体时,它将创建两行 - 一行用于父表,一行用于子表。