【问题标题】:OpenJPA creating EntityManager in code without persistence.xml, with propertiesOpenJPA在没有persistence.xml的代码中创建EntityManager,具有属性
【发布时间】:2011-11-30 13:47:29
【问题描述】:

我需要在没有persistence.xml的代码中创建EntityManager ... 我有



props.put("openjpa.ConnectionURL", "jdbc:sqlserver://databasehost:3306; DatabaseName=dbname; selectMethod=cursor;create=true");
    props.put("openjpa.ConnectionDriverName","com.mysql.jdbc.Driver");
    props.put("openjpa.ConnectionUserName", "dbname");
    props.put("openjpa.ConnectionPassword", "password");
    props.put("openjpa.jdbc.SynchronizeMappings", "buildSchema");
    props.put("openjpa.Log", "DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE");
    props.put("openjpa.RuntimeUnenhancedClasses", "supported");

    EntityManagerFactory factory = Persistence.createEntityManagerFactory("wp");
    em = factory.createEntityManager(props);

..当 em = factory.createEntityManager(props) 被调用时,我得到:

javax.persistence.PersistenceException:尝试以下发现的实现后,没有可用于“wp”的持久性提供程序:org.apache.openjpa.persistence.PersistenceProviderImpl 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:182) 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:72) 在 dao.wp.WP_EMH.getCurrentEntityManager(WP_EMH.java:27)

我知道没有提及标签表示的 persistence.xml 中的内容

PROVIDER- org.apache.openjpa.persistence.PersistenceProviderImpl - /PROVIDER

我应该如何将它添加到属性中?或者如何解决? 我的第二个问题是在 persistence.xml 中添加了实体类。如何用属性解决这个问题?

谢谢

【问题讨论】:

  • 请不要设置 openjpa.RuntimeUnenhancedClasses=supported ......这会在某个时候咬你。更好的选择是配置构建时间增强。

标签: java persistence openjpa entitymanager


【解决方案1】:

方法

javax.persistence.Persistence.createEntityManagerFactory(
    String persistenceUnitName);

期望来自persistence.xml 的配置。尝试将您的属性地图提供给

javax.persistence.Persistence.createEntityManagerFactory(
    String persistenceUnitName, Map properties);

很明显,属性集是不完整的;例如,它缺少持久类名:

properties.put("openjpa.MetaDataFactory", "jpa(Types=FQN.class1;FQN.class2;...)");

【讨论】:

  • 您是否确认向 createEntityManagerFactory 提供属性映射确实有效,或者这是一个假设?
  • 这是我们在我当前的任务中配置 EMF 的方式,间接由 Spring 提供。不过,我们确实使用了 persistence.xml。我指望来自 falconseye 的反馈。
  • 我很想看看你的想法。我几乎可以肯定需要有一个 persistence.xml 文件。
  • @Rick 它是规范所要求的,但您可以通过模仿 Spring LocalContainerEntityManagerFactoryBean 的做法来规避这一点。做起来不容易;见这里:stackoverflow.com/questions/4736301/…;我对结果更加好奇。
  • 答案不完整。如何添加提供者?
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 2011-08-17
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 2015-11-30
相关资源
最近更新 更多