繁体   English   中英

休眠:是否可以仅保留一个孩子,这也会导致持久保留父母

[英]Hibernate: Is it possible to persist only a child which will cause persisting a parent as well

假设我有一个父表A和一个子表B,它们有一个链接A.id和B.id的外键,问题是此父表和FK是最近创建的,并且存在太多持久化a的位置子表,所以我在等待一种简单的方法来保留父表并将其链接到子表。 是否可以通过使用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是因为在我的情况下,我使用了不同的主键名称,因此也许对某些人也有帮助。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM