0 Replies Latest reply on Mar 11, 2008 5:57 AM by Subhash Bhushan

    NonUniqueObjectException

    Subhash Bhushan Newbie

      Hi,

      I am trying to use a OneToMany relationship between my MemberDetail Class and its addresses. Here is the code:

      MemberDetail.java:

      public class MemberDetail implements java.io.Serializable {
      .
      .
      .
      private Collection<Address> addresses = new ArrayList<Address>();
      .
      .
      .
       @OneToMany(cascade={CascadeType.ALL}) @JoinColumn(name="LINKER_ID")
       public Collection<Address> getAddresses() {
       return addresses;
       }
       public void setAddresses(Collection<Address> addresses) {
       this.addresses = addresses;
       }
      .
      .
      .
      


      Address.java:
      public class Address implements java.io.Serializable {
      .
      .
      .
      private int id;
      .
      .
      .
      @Id
      @Column(name = "ID", unique = true, nullable = false, insertable = true, updatable = true)
       public int getId() {
       return this.id;
       }
       public void setId(int id) {
       this.id = id;
       }
      .
      .
      .
      


      The Address class does not have any reference to MemberDetail class.

      Creating the Member Detail:
       memberDetail.setProfileId(profile.getProfileId());
       memberDetail.setStatus('R');
       memberDetail.setModificationNum(1);
      
       officeAddress.setActive('R');
       officeAddress.setModificationNum(1);
       personalAddress.setActive('R');
       personalAddress.setModificationNum(1);
       memberDetail.getAddresses().add(officeAddress);
       memberDetail.getAddresses().add(personalAddress);
       try {
       manager.persist(memberDetail);
       return true;
       }catch(Exception exc){
       exc.printStackTrace();
       return false;
       }
      


      I get the following error upon persisting:

      19:37:16,671 ERROR [STDERR] javax.persistence.PersistenceException: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.justbooks.common.entities.Address#0]
      19:37:16,687 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:629)
      19:37:16,687 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:218)
      19:37:16,687 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManager.persist(TransactionScopedEntityManager.java:182)
      19:37:16,687 ERROR [STDERR] at com.justbooks.security.activities.ManageProfileBean.createProfile(ManageProfileBean.java:95)


      I am using EJB 3.0 persistence with J2EE 1.4/J2SE 5. I assume that Address IDs should be autogenerated. I am using MySQL DB and I have marked the field for autogenerate.

      I am sure I am doing something wrong, but not able to pinpoint the problem.

      Thanks in advance. Any clues are welcome.