Hibernate Collection Mapping - Fehler beim Updaten der DB

Dieses Thema Hibernate - Collection Mapping - Fehler beim Updaten der DB im Forum "Data Tier" wurde erstellt von geqoo, 23. Dez. 2014.

Thema: Collection Mapping - Fehler beim Updaten der DB Hi, Ich habe hier ein kleines Problem mit meinem Entity-Manager und hoffe mir kann hier jemand helfen. Wenn ich...

  1. Hi,

    Ich habe hier ein kleines Problem mit meinem Entity-Manager und hoffe mir kann hier jemand helfen.
    Wenn ich zu meiner Collection ein paar Einträge hinzufüge/entferne so wird die Datenbank nicht geupdated.

    Code (Java):

    @Entity
    @Table(name = "Subprograms")
    public class Subprogram implements IEntity, Serializable {

        @Id
        @GeneratedValue
        @Column(name = "id")
        private Long id;

        @OneToMany(mappedBy = "subprogram", fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL)
        private Set<SubprogramConfig> subprogramConfig = new HashSet<SubprogramConfig>();

        public Subprogram() {
        }

        @Override
        public Long getId() {
            return id;
        }

        @Override
        public void setId(Long id) {
            this.id = id;
        }

        public Set<SubprogramConfig> getSubprogramConfigSet() {
            return subprogramConfig;
        }

        public void setSubprogramConfigSet(Set<SubprogramConfig> SubprogramConfig) {
            this.subprogramConfig = subprogramConfig;
        }
    }
     
    Code (Java):

    @Entity
    @Table(name = "Subprogram_config")
    public class SubprogramConfig implements IEntity, Serializable {

        @Id
        @GeneratedValue
        @Column(name = "id")
        private Long id;

        @ManyToOne
        @JoinColumn(name = "fk_subprogram")
        private Subprogram subprogram;

        public SubprogramConfig() {
        }

        @Override
        public Long getId() {
            return id;
        }

        @Override
        public void setId(Long id) {
            this.id = id;
        }

        public Subprogram getSubprogram() {
            return subprogram;
        }

        public void setSubprogram(subprogram subprogram) {
            this.subprogram = subprogram;
        }

    }
     
    Und die Manager Klasse:
    Code (Java):

    public static List<IEntity> executeUpdate(List<IEntity> entityList) {

        session.beginTransaction();

        entityList.forEach(entity -> {
            Object persistentObj = session.load(entity.getClass(), entity.getId());

            try {
                BeanUtils.copyProperties(persistentObj, entity);
            } catch (Exception e) {
                e.printStackTrace();
            }

            session.save(persistentObj);
        });

        session.getTransaction().commit();

        return entityList;
    }
     
    Der Transaction-Commit liefert mir dann folgenden Fehler:
    Exception in thread "Thread-2" org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [main.java.controller.entities.SubprogramConfig#25]

    Dazu zu sagen ist noch, dass ich eine Kopie der Entity erzeuge, wenn ich damit arbeite und genau dafür soll das copyProperties gut sein, damit das persistente Objekt von Hibernate die richtigen (neuen) Collection-Daten bekommt.
    Kann mir da jemand weiter helfen?
     
    Zuletzt bearbeitet: 23. Dez. 2014
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*