hibernate:是否可以只持久化一个子级,这也会导致持久化父级

2admgd59  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(262)

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

会很乐意帮忙的,谢谢!

7jmck4yq

7jmck4yq1#

是 啊!我已经修好了,以防有人想知道答案,我把我的解决方案留在这里。也许你们花在解决同样问题上的时间会比我少。因此,首先需要使用@inheritation(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放在这里是因为在我的例子中,我有不同的主键名,所以也许它也对某些人有帮助。
就这样!现在,当您持久化子实体时,它将创建两行—一行用于父表,另一行用于子表。

相关问题