| 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
 
 
 |