2017-06-24 5 views
0

auf der Linie, an die diese Ausnahme auftritt, ist es bereits in Sitzungsbereich dh Sitzung ist für Proxy-Klasse noch diese Ausnahme zur Verfügung aufgetreten istorg.hibernate.LazyInitializationException: Alle möglichen Lösungen ausprobiert worden :(

Controller. Klassencode, in dem Fehler ist aufgetreten:

try{ 
    SessionFactory sessionfactory = MyFactory.getSessionFactory(); 
       Session s = sessionfactory.openSession(); 
    EmployeeDetails e = getEmployee(p_id); 
     DailyDataDetails d = new DailyDataDetails(); 
      d.setEmp_id(p_id); 
      d.setEmp_name(p_fname+" "+p_lname); 
      d.setPayable(pay); 
      d.setRate(Float.parseFloat(txtrate.getText())); 
      d.setSpindles(Integer.parseInt(txtSpindle.getText())); 
      d.setHour(hr); 
      d.setMin(min); 
      d.setWork_date(java.sql.Date.valueOf(select_date.getValue())); 


       s.beginTransaction(); 
       e.getDdd().add(d); 
      s.save(e); 
      s.getTransaction().commit(); 
      s.close(); 
      Notifications notiBuild = Notifications.create() 
         .title("Value Added") 
         .text("Value added sucessfully") 
         .graphic(node) 
         .hideAfter(Duration.seconds(5)) 
         .darkStyle() 
         .position(Pos.TOP_CENTER); 

       notiBuild.darkStyle(); 
       notiBuild.show(); 

       loadData(); 



    }catch(Exception e){ e.printStackTrace();} 

Ausnahme:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: models.EmployeeDetails.ddd, could not initialize proxy - no Session 
at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:582) 
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:201) 
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:561) 
at org.hibernate.collection.internal.AbstractPersistentCollection.write(AbstractPersistentCollection.java:392) 
at org.hibernate.collection.internal.PersistentBag.add(PersistentBag.java:297) 
at empman.FXMLAddValueController.toAddData(FXMLAddValueController.java:174) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

Hier ist meine Modellklasse:

@OneToMany(fetch = FetchType.LAZY) 
@JoinTable([email protected](name="eid"),i[email protected](name="id")) 
private Collection<DailyDataDetails> ddd = new ArrayList<DailyDataDetails>(); 

public int getEid() { 
    return eid; 
} 

public void setEid(int eid) { 
    this.eid = eid; 
} 

public Collection<DailyDataDetails> getDdd() { 
    return ddd; 
} 

public void setDdd(Collection<DailyDataDetails> ddd) { 
    this.ddd = ddd; 
} 

Punkte beachtet werden:.

=> Ausnahme auf der Linie tritt e.getDdd() (d) in FXMLAddValueController, aber diese Linie bereits im Rahmen der Hibernate-Session hinzufügen

= > Ich habe fetch = FetchType.Lazy verwendet, weil ich keine Kinddaten möchte

=> Ich möchte spezifische Lösung und den Grund, warum dies passiert.

=> Es ist eine Desktop-App, so habe ich nur Hibernate.cfg.xml.

=> Ich bin mit One-to-Many-Mapping

Antwort

0

Dies liegt daran, die Transaktion für getEmployee (p_id); ist schon geschlossen. Die Abfragen sollten sich in derselben Transaktion befinden.

Verwandte Themen