【问题标题】:How find a persistence.xml when I export a project in eclipse在eclipse中导出项目时如何找到persistence.xml
【发布时间】:2015-03-18 19:22:29
【问题描述】:

嗯,我正在使用 Eclipse 进行 JPA 项目。我使用:Hibernate、JavaFX 和 jOOQ,我将使用 Jasper。在 Eclipse 上项目运行正常,但是当我导出一个可运行的 jar 并尝试执行该 jar 时抛出异常。

Exception in Application start method
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(Unknown Source)
        at com.sun.javafx.application.LauncherImpl$$Lambda$48/1851691492.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.PersistenceException: Unable to build entity manager factory
        at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:83)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
        at br.com.olk.srv.dao.OlkDAO.<init>(OlkDAO.java:24)
        at br.com.olk.cli.controller.Main.<init>(Main.java:19)
        at br.com.olk.cli.view.LoginApp.start(LoginApp.java:24)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(Unknown Source)
        at com.sun.javafx.application.LauncherImpl$$Lambda$51/1604076978.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$45/1108411398.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$47/854215995.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$46/584634336.run(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
        at com.sun.glass.ui.win.WinApplication$$Lambda$37/1267032364.run(Unknown Source)
        ... 1 more
Caused by: org.hibernate.cache.NoCacheRegionFactoryAvailableException: Second-level cache is used in the application, but property hibernate.cache.region.factory_class is not given; please either disable second level cache or set correct region factory using the hibernate.cache.region.factory_class setting and make sure the second level cache provider (hibernate-infinispan, e.g.) is available on the classpath.
        at org.hibernate.cache.internal.NoCachingRegionFactory.buildNaturalIdRegion(NoCachingRegionFactory.java:89)
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:381)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845)
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
        at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
        ... 20 more
Exception running application br.com.olk.cli.view.LoginApp

我认为这可能是因为在 jar 文件中找不到可运行文件。如何让可运行的 jar 文件找到 persistence.xml 文件?

简而言之,我如何像在 Eclipse 中那样运行可运行的 jar 文件? (找到persistence.xml文件)

【问题讨论】:

    标签: hibernate jpa


    【解决方案1】:

    你的问题不是persistence.xml丢失,而是因为这个:

    应用中使用了二级缓存,但是属性 hibernate.cache.region.factory_class 没有给出;请要么 禁用二级缓存或设置正确的区域工厂使用 hibernate.cache.region.factory_class 设置并确保第二个 级别缓存提供程序(例如 hibernate-infinispan)在 类路径。

    我在这里讨论过这个错误:https://stackoverflow.com/a/29109009/3116666

    【讨论】:

    • 感谢 uaiHebert!我使用您发送给我的帖子解决了这个问题。我如何使用 Hibernate 4.x,我将“net.sf.ehcache.hibernate.EhCacheRegionFactory”更改为“org.hibernate.cache.ehcache.EhCacheRegionFactory”,然后现在正在运行。非常感谢。
    猜你喜欢
    • 2014-01-21
    • 2013-12-15
    • 2015-12-30
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多