Java – JPA onetoone bidirectional
•
Java
I have two entity classes with @ onetoone relationships The example code is as follows:
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 }
My question is "I can use the seta (a a) method in group B. I mean this."
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();
When I try this, foreign in table a (b_id)_ The key field is saved as null Please help me
Solution
Here, you have private a above class B; Mappedby. Is specified in In a two - way relationship, mapped by means that I am not the owner So this means that a is the owner of the relationship
In table a, you will have a foreign key for table B Since a is the owner, a assumes cascading operations to B. ideally, you should try a. setb() and persist a
Try the following:
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();
or
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();
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码