Hi Friends,
I have a Person entity and Address entity and there is @OneToMany relation b/w Person and address.
See below mapping
===================
@Entity @Table(name="Person") public class Person { @Id @GeneratedValue @Column(name = "p_id") private Long id; @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH }) @JoinColumn(name = "p_id") private List<Address> addressList = new ArrayList<Address>();
setters and getters...
========================================== @Entity @Table(name="ADDRESS") public class Address implements Serializable{
/** * */ private static final long serialVersionUID = 1L; @Id @Column(name="ADD_ID") @GeneratedValue private Long id; @Column(name="p_id") private Long addId;
setter and getter
====================
I am creating Person object and Address objects and adding Address object to Person object like below
--------------------------------------------------- Person p1=new Person(); Address a1= new Address(); Address a1= new Address(); p1.getAddressList().add(a1); p1.getAddressList().add(a1);
em.persist(a1); em.flush();
Person person1 = em.find(Person.class, 1L); System.out.println(person1.getAddressList(0).getAddId()); // getting addId value as null. here i am not closing entity manager and using same for find operation
// if close entity manager and open new entity manager then i am getting addId like 1,2
em.close(); em = entityManagerFactory().createEntityManager();
Person person1 = em.find(Person.class, 1L);
System.out.println(person1.getAddressList(0).getAddId()); // here i am getting 1 System.out.println(person1.getAddressList(1).getAddId()); // here i am getting 2
If I use same entitymanager to retrive address list from person entity addId is coming as null. If close entity manager and open new entity manager then i am getting addId like 1,2...
Can you guys explain why jpa has implemented in this way?
Thanks in Advance... Sud
|