【问题标题】:How to mark a persistence-unit as default in JPA (hibernate)?如何在 JPA(休眠)中将持久性单元标记为默认值?
【发布时间】:2014-10-10 12:48:45
【问题描述】:

我阅读了一些关于在 JPA 中将持久性单元中的一个设置为默认值的线程。但是hibernate.default_schema的用法好像很模糊。

但是,我想实现以下目标。

  • 有一个默认<persistence-unit name="myMainPU"> ... </persistence-unit>
  • 有一个或多个额外的<persistence-unit name="auxilliaryPU"> ... </persistence-unit>
  • 我不想用 name 属性注释我注入的 EntityManager。例如。对于默认持久性单元,不像 @Persistence(unitName="myMainPU")。应该是这样的@Persistence
  • 我想用 unitName 属性注释我的辅助 PU。例如。 @Persistence(unitName="auxilliaryPU")

如何做到这一点?我使用 Hibernate 4+,也可以接受专有解决方案。

谢谢。

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    没有“default pu”这样的默认选项。

    您可以做的是使用 CDI 并决定您将使用哪个 PU。我看不到其他方法。

    【讨论】:

    • 在 WildFly 上,您可以使用标志 wildfly.jpa.default-unit 定义默认持久性单元
    【解决方案2】:

    如果您使用的是 Spring,请尝试在任何其他 bean 之前添加它:

    <bean id="org.springframework.context.annotation.internalPersistenceAnnotationProcessor" class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"
        depends-on="myDefaultEntityManagerFactory, myAuxiliaryEntityManagerFactory, yetAnotherEntityManagerFactory">
        <property name="defaultPersistenceUnitName" value="my-default-PU" />
    </bean>
    

    【讨论】:

    • 不使用 Spring。但是,肯定有人获利!谢谢。
    【解决方案3】:

    如果您使用wildfly 作为容器,您可以将以下属性添加到您认为默认的persistence-unit。我假设其他容器可能有这样的属性。

    <property name="wildfly.jpa.default-unit" value="true" />
    

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 2013-07-26
      • 2012-10-07
      相关资源
      最近更新 更多