【问题标题】:javax.persistence.PersistenceException: No Persistence provider for EntityManager named hibernate.cfg.xmljavax.persistence.PersistenceException:没有名为 hibernate.cfg.xml 的 EntityManager 的持久性提供程序
【发布时间】:2016-07-15 06:27:19
【问题描述】:

我正在尝试在 Intellij Idea 上使用 Hibernate 连接数据库。

Bean文件是基于Hibernate实体类自动生成的。

public class SirketEntityManagedBean {

    private EntityManagerFactory myEntityManagerFactory;

    public SirketEntityManagedBean() {
        myEntityManagerFactory = Persistence.createEntityManagerFactory("hibernate.cfg.xml");
    }

    // ...
}

当我运行它时,会抛出以下异常:

javax.persistence.PersistenceException:没有名为 hibernate.cfg.xml 的 EntityManager 的持久性提供程序 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) beans.SirketEntityManagedBean.(SirketEntityManagedBean.java:40) sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.lang.reflect.Constructor.newInstance(Constructor.java:423) java.lang.Class.newInstance(Class.java:442) com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:186) com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:100) com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244) com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116) com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:71) org.apache.el.parser.AstValue.getValue(AstValue.java:161) org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) org.primefaces.component.panelmenu.PanelMenu.getModel(PanelMenu.java:84) org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:108) javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903) javax.faces.render.Renderer.encodeChildren(Renderer.java:176) javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:84) org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:71) org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:49) javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899) com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:451) com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

这里是persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

    <persistence-unit name="NewPersistenceUnit">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>hib.OrtamEntity</class>
        <class>hib.SorumluEntity</class>
        <class>hib.SirketEntity</class>
        <class>hib.VpnkullaniciEntity</class>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:oracle:thin:@//XXX.X.XX.XX:1521/PROD"/>
            <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
            <property name="hibernate.connection.username" value="XXTEST"/>
            <property name="hibernate.connection.password" value="XXTEST"/>
            <property name="hibernate.archive.autodetection" value="class"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>

这是项目目录:

这是怎么引起的,我该如何解决?

【问题讨论】:

  • 如果不调用init,那么它与PrimeFaces有什么关系呢?日志记录中的任何错误?如果您在“开发模式”下运行应用程序怎么办?您认为它是一个 bean 怎么办?面孔-config.xml?请创建一个minimal reproducible example
  • 那么该堆栈跟踪的哪一部分不清楚?你的标题是错误的,你的标签是错误的(但“错误更正”)
  • 你有persistence.xml吗?我强烈认为您的持久单元名称不是“hibernate.cfg.xml”。您的配置不正确。如果有的话,请在此处发布 persistence.xml。确保 persistence.xml 也是您的类路径。您可以参考这个问题以获得更多想法 - stackoverflow.com/questions/1158159/…
  • 我已经编辑了问题@Manish
  • @Erdinc - 我发布了这个问题的答案。您需要更改为 createEntityManagerFactory("NewPersistenceUnit")

标签: hibernate jpa persistence-provider


【解决方案1】:

createEntityManagerFactory 方法采用persistence-unit 的名称。某些 Hibernate 配置文件 (hibernate.cfg.xml) 不是 persistence-unit 的名称。 persistence-unit 在文件 persistence.xml 中指定。这将在您显然没有阅读过的任何 JPA 文档中得到充分描述

【讨论】:

    【解决方案2】:

    createEntityManagerFactory 方法接受 persistent unit 作为参数。持久性单元在一个名为 persistence.xml 的文件中进行了描述,并且此文件应位于项目的类路径中

    例如,如果您的持久单元名称是“exampledb”,那么方法调用将是 -

    EntityManagerFactory exDb = Persistence.createEntityManagerFactory("exampledb");

    请参考this问题也可以查看persistence.xml的例子

    【讨论】:

      【解决方案3】:

      这可能是因为 bean 定义。您是否在 xml 配置文件中定义了 bean 定义?如果你这样做了,请检查配置文件中的类名。如果没有,请在类定义的顶部添加 @ManagedBean(name = "sirketEntity")

      像这样:

      @ManagedBean(name = "sirketEntity")
      public class SirketEntityManagedBean {
      

      【讨论】:

        猜你喜欢
        • 2015-11-08
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多