[英]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
方法中执行此操作。
级联意味着它将触发对该关系的操作,但是在您的情况下,由于缺少一侧,该关系尚未完成。
您需要首先很好地了解这些关系。 据我所知,您可能会尝试在Foo
和Bar
之间建立双向的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.