javax.persistence.PersistenceException:无法生成实体管理器工厂

javax.persistence.PersistenceException:无法生成实体管理器工厂,exception,jpa,persistence,hibernate-entitymanager,Exception,Jpa,Persistence,Hibernate Entitymanager,当我试图创建一个新的EntityManager来持久化我的数据时,出现以下错误: javax.persistence.PersistenceException:无法构建实体管理器工厂 我正在使用Hibernate的JPA持久性提供程序 不幸的是,我在stackoverflow/谷歌搜索中找不到任何有用的帖子 有人知道错误的原因在哪里吗 谢谢你的帮助 代码片段: 创建entitymanager EntityManager em; EntityManagerFactory fact = Pe

当我试图创建一个新的EntityManager来持久化我的数据时,出现以下错误:

javax.persistence.PersistenceException:无法构建实体管理器工厂

我正在使用Hibernate的JPA持久性提供程序

不幸的是,我在stackoverflow/谷歌搜索中找不到任何有用的帖子

有人知道错误的原因在哪里吗

谢谢你的帮助

代码片段:

创建entitymanager

EntityManager em;
    EntityManagerFactory fact = Persistence.createEntityManagerFactory("bachelordebug"); // Here it crashes
    em = fact.createEntityManager();
stacktrace

javax.persistence.PersistenceException: Unable to build entity manager factory
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:81)
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 com.uzh.platform.api.util.AssignmentUtil.findAll(AssignmentUtil.java:20)
at com.uzh.platform.api.services.GetAssignments.getAssignments(GetAssignments.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:171)
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:152)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:402)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:349)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:106)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:259)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:318)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:236)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1010)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:156)
at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:233)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
         xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="bachelordebug" transaction-type="RESOURCE_LOCAL">
    <!-- <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> -->
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
   <class>com.uzh.platform.data.dao.Assignment</class>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://127.0.0.1:5432/bachelor"/>
        <property name="javax.persistence.jdbc.user" value="bachelor"/>
        <property name="javax.persistence.jdbc.password" value="bachelor14"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hibernate.connection.release_mode" value="after_statement"/>
        <property name="connection.pool_size" value="1"/>
        <property name="dialect" value="org.postgresql.Driver"/>
        <property name="current_session_context_class" value="thread"/>
        <property name="cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
        <property name="show_sql" value="true"/>
    </properties>
</persistence-unit>

org.hibernate.jpa.HibernatePersistenceProvider
com.uzh.platform.data.dao.Assignment

(在评论和编辑中回答的问题。请参阅)

OP写道:

解决

我终于发现了我的错误

在我的JPA实体类中,我拼错了我的
命名查询
注释(即使我没有使用它)

当然,必须用大写字母书写,即“分配”(即服务类中出现的所有术语!)

3天被这个愚蠢的错误浪费了——但现在我学会了怎么做!:-)

无论如何谢谢你的帮助


我遇到了同样的错误,不幸的是,上面的答案对我帮助不大。因此,我查看了在我的案例中报告的其他错误,其中我发现了此错误:

com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value 'EEST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
我按照答案和注释的规定解决了这个问题,将我的连接url替换为:“jdbc:mysql://localhost:3306/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"

解决了所有错误,包括问题中提到的错误:

javax.persistence.PersistenceException:无法生成实体管理器工厂


我希望这有助于其他人遇到与我相同的问题。

由于错误可能表明许多不同的原因,因此最好通过检查Hibernate调试日志语句来找到原因(我们使用logback,但它应该在任何其他日志框架中类似地工作):

这样,您可以获得大量输出,但可以确定实际感兴趣的类(很可能您已经发现了原因):

这对我们来说显示了如下内容(其中
映射集合:foo.Bar.field->some_tab_x
是我们发现错误映射所需的信息):


(例如,在Eclipse中,如果日志输出没有显示完整的类名,只需使用
CTRL+SHIFT+T
搜索您想要调试的类型)

在实体类中添加id注释

@Entity
public class yourClass{
  @Id
  private Long id;
  ...
 }

可能是数据库配置中的问题。尝试看看是否可以使用这些配置,使用简单的java代码访问DB。如果您使用的是maven,请将persistence.xml放在\src\main\resources\META-INF\persistence.xml位置。谢谢Jay的建议-我在那一秒就成功地让它工作了…:D(参见编辑)如果您没有拼写@NamedQuery,它不是显示了编译错误吗?不幸的是不是。。。另外,我应该写“从分配中选择一个”,而不是“从分配中选择*”
// (logback.groovy)

logger( "org.hibernate", DEBUG )
07:32:43.720 D~ [main ~ main] [     :     ] CollectionSecondPass:SecondPass:  67|  
  Second pass for collection: foo.Bar.field
07:32:43.720 D~ [main ~ main] [     :     ] c.a.CollectionBinder:SecondPass: 823|  
  Binding a OneToMany: foo.Bar.field through a foreign key
07:32:43.720 D~ [main ~ main] [     :     ] c.a.CollectionBinder:SecondPass: 861|  
  Mapping collection: foo.Bar.field -> some_tab_x
07:32:43.727 D~ [main ~ main] [     :     ] ePersistenceProvider:gerFactory:  82|  
  Unable to build entity manager factory
07:32:43.743 E~ [main ~ main] [     :     ] .l.f.m.m.MgFooTstJu:AndRethrow:  74|  
  MyException: unit test error loading Foo with id: 4342153208-2: 
  <java.lang.NullPointerException> => 
  <javax.persistence.PersistenceException: Unable to build entity manager factory>
// (logback.groovy)

//logger( "org.hibernate", DEBUG )  // log everything

// infos on annotation mappping, e.g. getting NullPointerExceptions with 
//   javax.persistence.PersistenceException: Unable to build entity manager factory
logger( "org.hibernate.cfg.annotations.CollectionBinder", DEBUG )
@Entity
public class yourClass{
  @Id
  private Long id;
  ...
 }