-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: How do dublicate an entity
PostPosted: Fri Nov 23, 2007 6:17 am 
Newbie

Joined: Wed Jun 06, 2007 8:09 am
Posts: 14
Location: Germany
Hi,

I am trying to duplicate an Entity including it's referenced entities (oneToMany). The idea is to have a template which can be copied, used and modified. This Template is "pfadLeistung" which references (oneToMany) "PfadLeistungSachmittelReferenz". I want to duplicate a "pfadLeistung" including it's references, modify some attributes and persist everything properly. What is the best way to duplicate pfadLeistung including it's references? Following I will post the involved classes and further info's. Thanx

Felix

Hibernate version:3

Mapping documents:Annotations

Code between sessionFactory.openSession() and session.close():
package prozessManager.services;

import ....

public class HibernateUtil {

private static ThreadLocal<Session> currentSession = new ThreadLocal<Session>();

public static void setCurrentSession(Session session) {
currentSession.set(session);
}

public static Session getCurrentSession() {
return currentSession.get();
}

private static boolean recreateDB = false;

public static void setRecreateDB(boolean recreateDB) {
HibernateUtil.recreateDB = recreateDB;
}

public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
sessionFactory = sessionFactory("hibernate.cfg.xml");
}
return sessionFactory;
}

private static SessionFactory sessionFactory = null;

private static SessionFactory sessionFactory(String configurationFileName) {
try {
AnnotationConfiguration annotationConfiguration =
new AnnotationConfiguration()
.addAnnotatedClass(Test.class)
.addAnnotatedClass(Pfad.class)
.addAnnotatedClass(Krankheitsbild.class)
.addAnnotatedClass(KrankheitsbildPfadReferenz.class)
.addAnnotatedClass(KrankheitsbildDiagnoseReferenz.class)
.addAnnotatedClass(Diagnose.class)
.addAnnotatedClass(Leistung.class)
.addAnnotatedClass(PfadLeistungReferenz.class)
.addAnnotatedClass(PfadLeistungBeteiligteOrganisationseinheitReferenz.class)
.addAnnotatedClass(PfadLeistungSachmittelReferenz.class)
.addAnnotatedClass(Patient.class)
.addAnnotatedClass(LeistungTyp.class)
.addAnnotatedClass(Organisationseinheit.class)
.addAnnotatedClass(Sachmittel.class)
.addAnnotatedClass(Mandant.class)
.addAnnotatedClass(Aufgabe.class)
.addAnnotatedClass(Projekt.class)
.addAnnotatedClass(ProjektAufgabeReferenz.class)
.addAnnotatedClass(ProjektAufgabeBeteiligteOrganisationseinheitReferenz.class)
.addAnnotatedClass(PatientPfadReferenz.class)
;

if (recreateDB) annotationConfiguration.setProperty("hibernate.hbm2ddl.auto", "create");
annotationConfiguration.configure();
return annotationConfiguration.buildSessionFactory();
} catch (Throwable ex){
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

}





Name and version of the database you are using:MySQL 5.0

Error Message:
HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error calling action method of component with id _idJsp0:_idJsp53
javax.faces.webapp.FacesServlet.service(FacesServlet.java:154)
prozessManager.web.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:28)


root cause

javax.faces.FacesException: Error calling action method of component with id _idJsp0:_idJsp53
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
javax.faces.component.UICommand.broadcast(UICommand.java:109)
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
prozessManager.web.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:28)


root cause

javax.faces.el.EvaluationException: Exception while invoking expression #{pfadController.patientZuordnen}
org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:156)
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
javax.faces.component.UICommand.broadcast(UICommand.java:109)
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
prozessManager.web.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:28)


root cause

java.util.ConcurrentModificationException
java.util.HashMap$HashIterator.nextEntry(Unknown Source)
java.util.HashMap$KeyIterator.next(Unknown Source)
org.hibernate.collection.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:555)
prozessManager.controller.pfad.PfadController.pfadLeistungenUebernehmen(PfadController.java:173)
prozessManager.controller.pfad.PfadController.patientZuordnen(PfadController.java:156)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
javax.faces.component.UICommand.broadcast(UICommand.java:109)
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
prozessManager.web.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:28)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.23 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.5.23


SQL: Hibernate: insert into PFADLEISTUNG (anforderndeOrganisationseinheit_fk, bedingung, istVorlage, leistung_fk, patientPfadReferenz_fk, pfad_fk) values (?, ?, ?, ?, ?, ?)
closing session 32870670


The Controller. It's starts with the method "patientZuordnen". The error accrues in line "curPfadLeistungReferenz = (PfadLeistungReferenz)iterator.next();" of the method "pfadLeistungenUebernehmen"

Code:

public class PfadController extends Controller {

...

public String patientZuordnen() {
      PatientPfadReferenz patientPfad = new PatientPfadReferenz();
      pfad.addPatient(patientPfad);
      patientPfad.setPfad(pfad);
      PatientPfadController patientPfadController = new PatientPfadController(patientPfad);
      patientPfadController.getPatientPfad().setPfad(this.pfad);
      
      pfadLeistungenUebernehmen(patientPfad);
      
      save();
      patientPfadController.setPredecessor(this);
      JSFService.getInstance().setController(patientPfadController);
      
      return "patientPfad";
   }
   
   public void pfadLeistungenUebernehmen(PatientPfadReferenz patientPfadReferenz ){
      
      Iterator iterator = this.pfad.getPfadLeistungList().iterator();
      while(iterator.hasNext()){
         
         PfadLeistungReferenz curPfadLeistungReferenz= new PfadLeistungReferenz();
         
         Session session = HibernateUtil.getCurrentSession();
         curPfadLeistungReferenz = (PfadLeistungReferenz)iterator.next();

         session.save(curPfadLeistungReferenz);
         curPfadLeistungReferenz.setIstVorlage(false);
         // This means "is template"
         
         patientPfadReferenz.addLeistung(curPfadLeistungReferenz);
         pfad.removePfadLeistung(curPfadLeistungReferenz);
         // here i am changing some attributes / references
         
         session.update(curPfadLeistungReferenz);
         
      }
   }
...
}




Code:
package prozessManager.domain.pfad;


import....

@Entity
@Table(name = "PFADLEISTUNG")
public class PfadLeistungReferenz {

   private Long id;
   private Pfad pfad;
   private Leistung leistung;
   private Organisationseinheit anforderndeOrganisationseinheit;
   private Set<PfadLeistungBeteiligteOrganisationseinheitReferenz> beteiligteOrganisationseinheiten = new LinkedHashSet<PfadLeistungBeteiligteOrganisationseinheitReferenz>();
   private Set<PfadLeistungSachmittelReferenz> pfadLeistungSachmittel = new LinkedHashSet<PfadLeistungSachmittelReferenz>();
   private PatientPfadReferenz patientPfadReferenz;
   private String bedingung;
   private boolean istVorlage;

   public boolean isIstVorlage() {
      return istVorlage;
   }

   public void setIstVorlage(boolean istVorlage) {
      this.istVorlage = istVorlage;
   }

   @ManyToOne
   @JoinColumn(name="leistung_fk")
   public Leistung getLeistung() {
      return leistung;
   }

   public void setLeistung(Leistung leistung) {
      this.leistung = leistung;
   }

   public PfadLeistungReferenz() {

   }
   
   @Id @GeneratedValue(strategy=GenerationType.AUTO)
   public Long getId() {
      return id;
   }
   public void setId(Long id) {
      this.id = id;
   }
   @ManyToOne
   @JoinColumn(name="pfad_fk")
   public Pfad getPfad() {
      return pfad;
   }

   public void setPfad(Pfad pfad) {
      this.pfad = pfad;
   }
   @ManyToOne()
   @JoinColumn(name="anforderndeOrganisationseinheit_fk")
   public Organisationseinheit getAnforderndeOrganisationseinheit() {
      return anforderndeOrganisationseinheit;
   }

   public void setAnforderndeOrganisationseinheit(
         Organisationseinheit anforderndeOrganisationseinheit) {
      this.anforderndeOrganisationseinheit = anforderndeOrganisationseinheit;
   }

   public String getBedingung() {
      return bedingung;
   }

   public void setBedingung(String bedingung) {
      this.bedingung = bedingung;
   }
   
   public void addAnforderndeOrganisationseinheit(Organisationseinheit organisationseinheit){
      anforderndeOrganisationseinheit=organisationseinheit;
      organisationseinheit.addPfadLeistungAnfordernderList(this);
   }
   
   @OneToMany(mappedBy="pfadLeistung", cascade=CascadeType.ALL,fetch=FetchType.EAGER)
   public Set<PfadLeistungBeteiligteOrganisationseinheitReferenz> getBeteiligteOrganisationseinheiten() {
      return beteiligteOrganisationseinheiten;
   }

   public void setBeteiligteOrganisationseinheiten(
         Set<PfadLeistungBeteiligteOrganisationseinheitReferenz> beteiligteOrganisationseinheiten) {
      this.beteiligteOrganisationseinheiten = beteiligteOrganisationseinheiten;
   }
   
   public void addBeteiligteOrganisationseinheit(Organisationseinheit beteiligteOrganisationseinheit){
      PfadLeistungBeteiligteOrganisationseinheitReferenz ref = new PfadLeistungBeteiligteOrganisationseinheitReferenz();
      ref.setBeteiligteOrganisationseinheit(beteiligteOrganisationseinheit);
      ref.setPfadLeistung(this);
      this.beteiligteOrganisationseinheiten.add(ref);
      
   }

   public void addSachmittel(Sachmittel sachmittel){
      PfadLeistungSachmittelReferenz ref = new PfadLeistungSachmittelReferenz();
      ref.setSachmittel(sachmittel);
      ref.setPfadLeistung(this);
      this.pfadLeistungSachmittel.add(ref);
      
   }
   
   @OneToMany(mappedBy="pfadLeistung", cascade=CascadeType.ALL,fetch=FetchType.EAGER)
   public Set<PfadLeistungSachmittelReferenz> getPfadLeistungSachmittel() {
      return pfadLeistungSachmittel;
   }

   public void setPfadLeistungSachmittel(
         Set<PfadLeistungSachmittelReferenz> pfadLeistungSachmittel) {
      this.pfadLeistungSachmittel = pfadLeistungSachmittel;
   }
   
   public void removeBeteiligteOrganisationseinheit(PfadLeistungBeteiligteOrganisationseinheitReferenz beteiligteOrganisationReferenz){
      this.beteiligteOrganisationseinheiten.remove(beteiligteOrganisationReferenz);
   }
   public void removeSachmittel(PfadLeistungSachmittelReferenz sachmittelReferenz){
      this.pfadLeistungSachmittel.remove(sachmittelReferenz);
   }

   @ManyToOne()
   @JoinColumn(name="patientPfadReferenz_fk")
   public PatientPfadReferenz getPatientPfadReferenz() {
      return patientPfadReferenz;
   }

   public void setPatientPfadReferenz(PatientPfadReferenz patientPfadReferenz) {
      this.patientPfadReferenz = patientPfadReferenz;
   }
   
}


Code:
package prozessManager.domain.pfad;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import prozessManager.domain.sachmittel.Sachmittel;

@Entity
@Table(name = "PfadLeistungSachmittel")
public class PfadLeistungSachmittelReferenz {
   private Long id;
   private Sachmittel sachmittel;
   private PfadLeistungReferenz pfadLeistung;
   private int anzahl;
   
   public int getAnzahl() {
      return anzahl;
   }
   public void setAnzahl(int anzahl) {
      this.anzahl = anzahl;
   }
   @Id @GeneratedValue(strategy=GenerationType.AUTO)
   public Long getId() {
      return id;
   }
   public void setId(Long id) {
      this.id = id;
   }
   
   @ManyToOne
   @JoinColumn(name="pfadLeistung_fk")
   public PfadLeistungReferenz getPfadLeistung() {
      return pfadLeistung;
   }
   public void setPfadLeistung(PfadLeistungReferenz pfadLeistung) {
      this.pfadLeistung = pfadLeistung;
   }
   
   @ManyToOne
   @JoinColumn(name="sachmittel_fk")
   public Sachmittel getSachmittel() {
      return sachmittel;
   }
   public void setSachmittel(Sachmittel sachmittel) {
      this.sachmittel = sachmittel;
   }

}


Code:
package prozessManager.domain.patient;

import java.util.LinkedHashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import prozessManager.domain.pfad.Pfad;
import prozessManager.domain.pfad.PfadLeistungReferenz;

@Entity
@Table(name = "PatientPfad")
public class PatientPfadReferenz {
   private Long id;
   private Pfad pfad;
   private Patient patient;
   private String aufnahmeDatum;
   private Set<PfadLeistungReferenz> pfadLeistungReferenz = new LinkedHashSet<PfadLeistungReferenz>();
   

   public String getAufnahmeDatum() {
      return aufnahmeDatum;
   }

   public void setAufnahmeDatum(String aufnahmeDatum) {
      this.aufnahmeDatum = aufnahmeDatum;
   }

   @ManyToOne
   @JoinColumn(name="patient_fk")
   public Patient getPatient() {
      return patient;
   }

   public void setPatient(Patient patient) {
      this.patient = patient;
   }

   
   @Id @GeneratedValue(strategy=GenerationType.AUTO)
   public Long getId() {
      return id;
   }
   public void setId(Long id) {
      this.id = id;
   }
   @ManyToOne
   @JoinColumn(name="pfad_fk")
   public Pfad getPfad() {
      return pfad;
   }

   public void setPfad(Pfad pfad) {
      this.pfad = pfad;
   }
   
   @OneToMany(mappedBy="patientPfadReferenz", cascade=CascadeType.ALL,fetch=FetchType.EAGER)
   public Set<PfadLeistungReferenz> getPfadLeistungReferenz() {
      return pfadLeistungReferenz;
   }

   public void setPfadLeistungReferenz(
         Set<PfadLeistungReferenz> pfadLeistungReferenz) {
      this.pfadLeistungReferenz = pfadLeistungReferenz;
   }
   
   public void addLeistung (PfadLeistungReferenz pfadLeistungReferenz){
      this.pfadLeistungReferenz.add(pfadLeistungReferenz);
      pfadLeistungReferenz.setPatientPfadReferenz(this);
      
   }
   
   public void removeLeistung (PfadLeistungReferenz pfadLeistungReferenz){
      this.pfadLeistungReferenz.remove(pfadLeistungReferenz);
      pfadLeistungReferenz.setPatientPfadReferenz(null);
      
   }
   
}


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.