【问题标题】:Cannot initialize EntityManager in Netbeans via Junit无法通过 Junit 在 Netbeans 中初始化 EntityManager
【发布时间】:2010-10-25 13:25:10
【问题描述】:

我有一堆要进行单元测试的服务(ejb 3)类。为了做到这一点,我在他们的实现类中添加了一个重载的构造函数,它以一个 EntityManager 作为参数。这个想法是,在我的单元测试期间,我将从特定于我的单元测试的持久性单元创建一个 EntityManager 实例,并使用重载的构造函数创建我的服务类的实例。在那里,我通过了在我的单元测试中创建的 EntityManger。

我的PU配置如下:

<persistence-unit name="MyPU-junit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source/>
    <properties>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>

这就是我在单元测试中创建 EntityManager 的方法:

    Map<String, String> config = new HashMap<String, String>();
    config.put("connection.url", "jdbc:postgresql://localhost:5432/MyDb");
    config.put("connection.username", "postgres");
    config.put("connection.password", "admin12345_");
    config.put("connection.driver_class", "org.postgresql.Driver");
    config.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
    config.put("hibernate.show_sql", "true");
    emf = Persistence.createEntityManagerFactory("MyPU-junit", config);
    em = emf.createEntityManager();

问题是我得到这个错误:

SEVERE: could not complete schema update
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
        at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
        at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:27)
        at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:127)
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:314)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)

我不确定它是否与之前的错误有关,但在初始化期间我也收到了来自解析器的一堆警告:

Failed to read schema document 'http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd'

请注意,我确实尝试通过将休眠参数直接放入persistence.xml文件而不是编程来运行相同的东西。

我使用的是 netbeans 6.9。

非常欢迎任何帮助!我真的对此感到沮丧......

【问题讨论】:

    标签: jpa netbeans junit


    【解决方案1】:

    使用以下内容:

    Map<String, String> config = new HashMap<String, String>();
    config.put("hibernate.connection.url", "jdbc:postgresql://localhost:5432/MyDb");
    config.put("hibernate.connection.username", "postgres");
    config.put("hibernate.connection.password", "admin12345_");
    config.put("hibernate.connection.driver_class", "org.postgresql.Driver");
    config.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
    config.put("hibernate.show_sql", "true");
    emf = Persistence.createEntityManagerFactory("MyPU-junit", config);
    em = emf.createEntityManager();
    

    【讨论】:

    • @jmatter:这很奇怪。我在发布之前尝试过(仔细检查属性是否正常),它对我有用。你也遇到同样的错误吗?
    • 是的,我得到了同样的错误。有趣的是,当hibernate 解析persistence.xml 文件时,我收到一堆警告,因为由于某种特殊原因,它找不到xsd。但我真的不认为这与它有多大关系......
    • @jmatter:我至少可以确认您需要在属性前加上 hibernate. 前缀,因此上述内容是正确的。你能显示“标题”或你的 persistence.xml 吗?
    【解决方案2】:

    关于解析器警告,也许你的 xml 是错误的? 尝试使用以下内容(从有效的 persistence.xml 中提取)附上您的配置:

     <?xml version="1.0" encoding="UTF-8"?>
     <persistence version="2.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_2_0.xsd">
     ...
     </persistence>
    

    【讨论】:

      【解决方案3】:

      我修复了一个类似的问题,确保所有必需的库都在“测试库”文件夹中(jdbc 驱动程序、休眠库、..)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-26
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 2018-11-05
        • 2021-03-30
        • 2016-09-13
        相关资源
        最近更新 更多