繁体   English   中英

通过Hibernate + JPA在两个实体中保存ID

[英]Save id in both entities via Hibernate + JPA

我有两个具有OneToOne关系的实体,如下所示:

@Entity
@Table(name = "FOO")
Foo{

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "foo")
    @Cascade({org.hibernate.annotations.CascadeType.ALL})
    @JoinColumn(name = "BAR_ID")
    private Bar bar;

    // getters and setters
 }

 @Entity
 @Configurable
 @Table(name = "BAR")
 Bar{
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "FOO_ID")
    @Cascade({org.hibernate.annotations.CascadeType.ALL})
    private Foo foo;

    // getters and setters
 }

在服务层中,我通过在Foo中设置Bar来建立连接:

 Bar.setFoo(foo);
 barDAO.saveOrUpdate(bar);

Wich将foo id保存在Bar表中。 但是相反的事情不会发生。 休眠是否可以保存仅创建一组的两个ID? 我以为这已经可以了

您错过了关系的另一面。

如果您说bar.setFoo(foo)那么在必须说foo.setBar(bar) ,当然也可以在setFoo方法中执行此操作。

级联意味着它将触发对该关系的操作,但是在您的情况下,由于缺少一侧,该关系尚未完成。

您需要首先很好地了解这些关系。 据我所知,您可能会尝试在FooBar之间建立双向的OneToOne关系。

@Entity
@Table(name = "FOO")
Foo {

     @OneToOne(cascade = CascadeType.ALL)
     @JoinColumn(name = "BAR_ID")
     private Bar bar;

     // getters and setters
}

@Entity
@Table(name = "BAR")
Bar{

    @OneToOne(mappedBy = "bar")
    private Foo foo;

    // getters and setters
}

在双向关联中,关联的两侧均退出-拥有和反向。 对于一对一的双向关系,拥有方对应于包含适当外键的方。

这里的拥有方Foo而BAR_ID将是该外键。 两端都有连接列是没有意义的。 关系将从Foo层叠到Bar 此处的反面Bar ,需要用拥有方参考的值mapped by来注释。

现在,如果你设置Bar在对象Foo它会持续的Bar对象与映射一起Foo 做相反的事情没有道理。 是不是?

暂无
暂无

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

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