【问题标题】:OpenJPA: How to configure EntityManager programmatically?OpenJPA:如何以编程方式配置 EntityManager?
【发布时间】:2015-01-27 15:58:15
【问题描述】:

我尝试以编程方式配置我的 EntityManager。我的供应商是 OpenJPA,我编写了一个简单的控制台应用程序。这是我的代码

public static void main(String[] args) {
    Map<String, String> properties = new HashMap<>();

    properties.put("openjpa.ConnectionDriverName", "org.postgresql.Driver");
    properties.put("openjpa.ConnectionURL", "jdbc:postgresql://localhost:5432/shop");

    properties.put("openjpa.ConnectionUserName", "bob");
    properties.put("openjpa.ConnectionPassword", "secret");

    properties.put("openjpa.RuntimeUnenhancedClasses", "supported");
    properties.put("openjpa.MetaDataFactory", "jpa(Types=de.jpa.demo.dto.Category;de.jpa.demo.dto.User;de.jpa.demo.dto.Order;de.jpa.demo.dto.Product)");
    properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(foreignKeys=true)");

    EntityManagerFactory factory = Persistence.createEntityManagerFactory("test", properties);

    OpenJPAConfiguration configuration = ((EntityManagerFactoryImpl) factory).getConfiguration();
    MetaDataRepository repositoryInstance = configuration.getMetaDataRepositoryInstance();

    repositoryInstance.addPersistenceAware(Category.class);
    repositoryInstance.addPersistenceAware(Order.class);
    repositoryInstance.addPersistenceAware(Product.class);
    repositoryInstance.addPersistenceAware(User.class);

    manager = factory.createEntityManager();    
}

但我得到一个错误

javax.persistence.PersistenceException: No persistence providers available for "test" after trying the following discovered implementations: org.apache.openjpa.persistence.PersistenceProviderImpl
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:182)
    at de.jpa.demo.dto.OpenJpaUserRepositoryIT.init(OpenJpaUserRepositoryIT.java:56)
    at de.jpa.demo.dto.OpenJpaUserRepositoryIT.before(OpenJpaUserRepositoryIT.java:22)

我做错了什么?

【问题讨论】:

    标签: java jpa entitymanager openjpa


    【解决方案1】:

    必须拥有一个 META-INF/persistence.xml 文件,其中包含一个名为“test”的持久性单元。

    另外,删除 openjpa.RuntimeUnenhancedClasses 属性。这是一个有缺陷的功能,如果您花时间找出另一种增强策略,您会更开心。

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 2014-12-15
      • 2011-02-17
      • 2012-10-09
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      相关资源
      最近更新 更多