【问题标题】:Is there a way to give persistenceUnitName for Spring's LocalContainerEntityManagerFactoryBean without persistence.xml?有没有办法在没有 persistence.xml 的情况下为 Spring 的 LocalContainerEntityManagerFactoryBean 提供 persistenceUnitName?
【发布时间】:2012-10-03 00:34:24
【问题描述】:

我在 spring 上下文中定义了多个数据源和多个 EntityManagerFactories。

如果仅在 EntityManagerFactory 上存在,我们不需要提供 persistenceUnitName。但是要将 EntityManager 以更正 EntityManagerFactory 与 @PersistenceContext 我应该提供 unitName="somePU" 属性。

但是,如果我们为 persistenceUnitName 属性命名,那么 Spring 期望在 persistence.xml 文件中声明这些 persistenceUnitName。

有没有办法在没有 persistence.xml 的情况下为 Spring 的 LocalContainerEntityManagerFactoryBean 提供 persistenceUnitName?

当我将 persistence.xml 与 Spring 的 LocalContainerEntityManagerFactoryBean 一起使用时,我还发现了另一个问题。 packagesToScan 属性不起作用。我需要列出 persistence.xml 中的所有实体类。

知道为什么会这样吗?

-siva

【问题讨论】:

  • 我猜,在指定persistence.xml 时,使用的是JPA 扫描而不是spring 扫描。
  • 实际上为什么spring需要persistenceUnitName出现在persistence.xml中?无论如何它不包含除单元名称之外的任何内容。

标签: java spring hibernate jpa-2.0


【解决方案1】:

创建LocalEntityManagerFactoryBean后,设置持久化单元名称:

    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();

    factory.setPersistenceUnitName("NAME_OF_PERSISTENCE_UNIT");

【讨论】:

    【解决方案2】:

    LocalContainerEntityManagerFactoryBean 中指定属性对我有用

        <property name="persistenceUnitName" value="MyPersistenceUnit"/>
    

    【讨论】:

    • 如果我们为 persistenceUnitName 属性命名,那么 Spring 期望在 persistence.xml 文件中声明这些 persistenceUnitName。没有persistence.xml是否可行?
    • 它会在日志中抛出一些异常或消息吗?我已经从我的项目中完全删除了 persistence.xml。一切都是用 LocalContainerEntityManagerFactoryBean 配置的。
    • 但我不得不从我的项目中删除 persistence.xml。如果它存在,它会与 Spring 发生冲突,即使我没有在任何地方引用它。
    猜你喜欢
    • 2014-02-18
    • 2013-01-26
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2016-01-10
    • 2016-01-19
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多