2017-03-02 6 views
0

Ich versuche, eine Liste von Objekten aus einer MySQL-Tabelle in einer JavaFX Combobox zu laden mit Hibernate und dao Mustern, hier ist mein Code:Laden von benutzerdefinierten Objekte zu JavaFX Combobox aus Mysql Datenbank

Main.java

public class Main extends Application { 
@Override 
public void start(Stage primaryStage) { 
    try { 
     BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("/view/Home.fxml")); 
     Scene scene = new Scene(root,1600,900); 
     scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
     primaryStage.setTitle("Dentium"); 
     primaryStage.setScene(scene); 
     primaryStage.setMaximized(true); 

     primaryStage.show(); 

     Rectangle2D primScreenBounds = Screen.getPrimary().getVisualBounds(); 
     primaryStage.setX((primScreenBounds.getWidth() - primaryStage.getWidth())/2); 
     primaryStage.setY((primScreenBounds.getHeight() - primaryStage.getHeight())/4); 

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

public static void main(String[] args) { 
    launch(args); 
} 

}

OthersDaoImplementation

public class OthersDaoImp implements OthersDao { 


@Override 
public List<Others> getAllHealthAlerts() { 

    List<Others> healthAlerts = new ArrayList<>(); 
    Transaction transaction = null; 
    Session session = HibernateUtil.getSessionFactory().openSession(); 

    try 
    { 
     transaction = session.beginTransaction(); 
     healthAlerts = session.createQuery("from Others").list(); 
     session.getTransaction().commit(); 
    } 
    catch (RuntimeException e) 
    { 
     if (transaction != null) { 
      transaction.rollback(); 
     } 
     e.printStackTrace(); 
    } 
    finally { 
     session.flush(); 
     session.close(); 
    } 
    return healthAlerts; 
} 

}

Ich bekomme diesen Fehler, jede Hilfe würde sehr geschätzt werden.

INFO: HHH000397: Using ASTQueryTranslatorFactory 
Hibernate: select others0_.id as id1_0_, others0_.healthAlert as  healthAl2_0_ from others others0_ 
javafx.fxml.LoadException: 
/D:/Programming/EclipseNeon/DentiumFx/bin/view/Home.fxml 

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
at application.Main.start(Main.java:16) 
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
at java.lang.Thread.run(Unknown Source) 
Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress 
at org.hibernate.internal.SessionImpl.checkTransactionNeeded(SessionImpl.java:3450) 
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1418) 
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1414) 
at dao.imp.OthersDaoImp.getAllHealthAlerts(OthersDaoImp.java:60) 
at controller.PatientController.getHealthAlertsList(PatientController.java:31) 
at controller.PatientController.initialize(PatientController.java:115) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) 
... 17 more 
+0

Welches ist Zeile 60? –

+0

'session.flush(); 'von anderenDaoImp.getAllHealthAlerts(); – Thipharete19

Antwort

0

Vom Javadocs for Session.flush()

Kraft dieser Sitzung zu spülen. Muss am Ende einer Arbeitseinheit, aufgerufen werden, bevor die Transaktion und Schließen der Sitzung

So begehen, wenn Sie flush() nennen, sollten Sie dies im try Block tun, bevor commit() aufrufen.

Doch was flush() tut, ist

Synchron [e] der zugrunde liegende persistente Speicher mit persistierbar Zustand im Speicher gehalten

heißt es aktualisiert die Datenbank mit dem aktuellen In-Memory-Zustand. Da Sie in dieser Transaktion keine persistenten Objekte im Speicher geändert haben, denke ich, dass dieser Aufruf sowieso redundant ist. Sie sollten diesen Anruf einfach entfernen können.

+0

Danke, ich habe es einfach entfernt, und es funktioniert! – Thipharete19

Verwandte Themen