java – JPA OneToOne双向.
发布时间:2020-07-24 16:22:02 所属栏目:Java 来源:互联网
导读:我有两个@OneToOne关系的实体类.示例代码如下: public class A {@Idprivate int id;private String name;@JoinColumn(name = B_ID, referencedColumnName = id)@OneToOne(cascade=CascadeType.ALL)private B b;//setters
|
我有两个@OneToOne关系的实体类.示例代码如下: public class A {
@Id
private int id;
private String name;
@JoinColumn(name = "B_ID",referencedColumnName = "id")
@OneToOne(cascade=CascadeType.ALL)
private B b;
//setters and getters
}
public class B {
@Id
private int id;
private String name;
@OneToOne(mappedBy="b")
private A a;
//setter and getters
}
我的问题是“我可以在B组中使用setA(A a)方法.我的意思是这样的.” em.getTransaction().begin();
A aa = new A();
aa.setId(1);
aa.setName("JJ");
em.persist(aa);
B bb = new B();
bb.setId(1);
bb.setName("CC");
bb.setA(aa);
em.persist(bb);
em.getTransaction().commit();
当我这样尝试时,表A(B_ID)中的foreign_key字段保存为null. 解决方法在这里,您已在B类上面的private A a;中指定了mappedBy.在双向关系中,mappedBy意味着我不是所有者.所以这意味着A是这段关系的所有者.在A表中,你将有一个B表的外键.由于A是所有者,A假设将操作级联到B.理想情况下你应该尝试a.setB()然后持久化a. 试试以下: em.getTransaction().begin();
//first create B.
B bb = new B();
bb.setId(1);
bb.setName("CC");
em.persist(bb);
//create A with B set in it.
A aa = new A();
aa.setId(1);
aa.setName("JJ");
aa.setB(bb);
em.persist(aa);
em.getTransaction().commit();
要么 em.getTransaction().begin();
//first create B.
B bb = new B();
bb.setId(1);
bb.setName("CC");
// no need to persist bb.
//create A with B set in it.
A aa = new A();
aa.setId(1);
aa.setName("JJ");
aa.setB(bb);
em.persist(aa); // because of cascade all,when you persist A,// B will also be persisted.
em.getTransaction().commit(); (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
