当前位置: 首页 > 面试题库 >

javax.persistence.PersistenceException:没有名为enterManager的EntityManager的持久性提供程序

屈升
2023-03-14
问题内容

我是JPA和Hibernate的新手。阅读一些在线资料后,我现在了解了什么是Hibernate以及如何将其与JPA一起使用。

现在,我正在尝试运行此JPA&Hibernate教程。我已经完成了他们在本教程中提到的所有内容。

我没有Oracle
DB,只有MySQL。因此,我对persistence.xml使用JPA和Hibernate的理解进行了一些更改(我不知道它是否正确……在我看来是正确的。)

这是我的 persistence.xml

<persistence 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" version="1.0">
  <persistence-unit name="customerManager" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>Customer</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.password" value="1234"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
    </properties>
  </persistence-unit>
</persistence>

但是我似乎没有得到他们描述的输出。它给了我:

Customer id before creation:null
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" javax.persistence.PersistenceException: No Persistence     provider for EntityManager named customerManager
 at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
 at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
 at CustomerDAO.create(CustomerDAO.java:8)
 at CustomerDAO.main(CustomerDAO.java:22)

任何建议将不胜感激。

更新:

我已完成要求进行的更改。但是,仍然出现asme错误行!!!

他们没有在该教程中提及有关 orm.xml的 任何内容。可能是问题的根源!!!


问题答案:

persistence.xml的用户名无效,EntityManagerFactory因此无法创建。它应该是:

<persistence 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" version="1.0">
  <persistence-unit name="customerManager" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>Customer</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.password" value="1234"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
    </properties>
  </persistence-unit>
</persistence>

(请注意<property>元素是如何关闭的,不应嵌套)

更新:
我遍历了本教程,Id使用MySQL时,您还必须更改生成策略(因为MySQL不支持序列)。我建议使用该AUTO策略(MySQL默认为IDENTITY)。为此,请删除SequenceGenerator注释并按如下所示更改代码:

@Entity
@Table(name="TAB_CUSTOMER")
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="CUSTOMER_ID", precision=0)
    private Long customerId = null;

   ...
}

这应该有所帮助。

PS:您还应该提供一个log4j.properties建议。



 类似资料:
  • 问题内容: 我在目录下使用相同的名字。然后,我用以下代码调用它: 但是,我收到以下错误消息: 这是: 它应该在类路径中。但是,我得到了上面的错误。 问题答案: 在之后,定义持久性提供程序名称:

  • 我试图在Eclipse中测试我的hibernate maven应用程序,当我运行获取enttity类名称的方法时,我得到了以下异常: 这是persistence.xml: 这是使用以下方法的类: 波姆。xml: 我尝试更改持久性的版本号、更改xmlns、提供程序的名称,但仍然是例外。

  • 我在REST服务器上工作,同时学习EJB\Hibernate。当服务调用DAO时,我面临一个问题,即它找不到我的持久性单元。 在本例中,我得到“无法为unitName PersistenceUnit检索EntityManagerFactory” 然后我试试这个: null pom.xml

  • 我正在尝试调用persistence.xml来显示Netbean IDE中数据库中的一些数据。我已经查看并尝试了以前用户提出的不同方法,但我仍然无法解决这个问题。 我用这个来称呼持久性单元, 这是我试图运行文件时返回的结果, 这是第805行,错误似乎就是从这里产生的 如前所述, 我已经在持久化单元名称下添加了提供者, 我已经确保持久性是单元在META-INF文件夹中, 它在类路径中,所以我不确定错

  • 我正在使用JPA开发一个JavaSE应用程序。不幸的是,调用后我得到了: 下面你会发现: 调用并意外返回 我的坚持。xml文件 我的项目结构 我的代码片段: 我的坚持。xml: 我的项目结构:

  • 在drools workbench中,我创建了java类来获取entitymanager,并在drl文件中使用它,但我的问题是 当我在workbench中创建新项目时,我会像maven一样创建项目结构 当我打电话给全班的时候,像贝娄一样 persistence.xml像贝娄 还有pom。类xml 当我试图调用工厂类时,我没有为名为XXX的持久性提供程序 新工厂类