JPAとJavaFxで非常に不快で明確でないケースが発生しています。JPA EntityManager と JavaFx および Entity Manager が JavaFX で動作しないという他の 2 つのスレッドでこれについて質問しようとしまし た
しかし、私はここに新しいスレッドを開くことを余儀なくされました:状況:
私はNetBeansとPostgres、JavaFx Fxml Applicationを使用しています。最初に行うことは、これを与える永続ユニットを追加することです:
与えられたアドバイスに取り組み、このページhttp://tomee.apache.org/jpa-concepts.htmlを読んだ後
- JavaFx では、トランザクション タイプは「RESOURCE_LOCAL」でなければならないことがわかったので、それを確認しました。
- そのモードでは、EntityManagerFactory は @PersistenceUnit アノテーションのみを介して (@PersistenceContext ではなく) 注入する必要があることも発見したので、それも確認しました。
そして、これが私のコードがどのように見えるかです
package rawda;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javax.persistence.Persistence;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceUnit;
/**
*
* @author Aymen Daoudi
*/
public class Rawda extends Application
{
@PersistenceUnit(unitName="RawdaPU")
static private EntityManagerFactory emf;
static
{
try
{
emf = Persistence.createEntityManagerFactory("RawdaPU");
EntityManager em = emf.createEntityManager();
}
catch (Exception e)
{
System.out.println("Fatal: Unable to create entity manager factory");
e.printStackTrace();
}
}
@Override
public void start(Stage stage) throws Exception
{
Parent root = FXMLLoader.load(getClass().getResource("View/MainView.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
/**
* The main() method is ignored in correctly deployed JavaFX application.
* main() serves only as fallback in case the application can not be
* launched through deployment artifacts, e.g., in IDEs with limited FX
* support. NetBeans ignores main().
*
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
このコードを実行すると、行で次の例外が生成されます
EntityManager em = emf.createEntityManager();
例外は次のとおりです。
Exception Description: Configuration error. Class [org.postgresql.Driver] not found.
Fatal: Unable to create entity manager factory
javax.persistence.PersistenceException: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error. Class [org.postgresql.Driver] not found.
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:517)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:188)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:277)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:294)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:272)
at rawda.Rawda.<clinit>(Rawda.java:31)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:276)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
at java.lang.Thread.run(Thread.java:662)
Caused by: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error. Class [org.postgresql.Driver] not found.
at org.eclipse.persistence.exceptions.DatabaseException.configurationErrorClassNotFound(DatabaseException.java:82)
at org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:267)
at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:206)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:488)
... 13 more
そのため、データベースとやり取りするための EntityManager を作成できません。不足しているものを明確にしてください。事前に感謝します。