1

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

将appriciate任何帮助,谢谢!

4

1 回答 1

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

而已!现在,当您持久化一个子实体时,它将创建两行 - 一行用于父表,另一行用于子表。

于 2013-06-07T06:36:03.670 回答