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
}
}

将感激任何帮助,谢谢!

是啊!我把它修好了,以防有人想知道答案,我把解留在这里。也许你们会比我花更少的时间来解决同样的问题。因此,首先需要使用@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因为在我的情况下,我有不同的主键名也许它也能帮助别人。

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

最新更新