【问题标题】:Creating converters based on multiple attributes in JPA 2.1在 JPA 2.1 中创建基于多个属性的转换器
【发布时间】:2014-09-30 01:53:51
【问题描述】:

JPA 2.1 引入了type converters。我找到了examples of converters based on a single entity attribute

是否可以创建基于多个实体属性的类型转换器?
有例子吗?

【问题讨论】:

    标签: java hibernate jpa orm jpa-2.1


    【解决方案1】:

    JPA 2.2 不支持此功能。

    如果您使用的是 Hibernate,那么您可以简单地使用 Hibernate CompositeUserType

    Hibernate 让您可以灵活地将一种或多种 SQL 类型映射到特定的领域模型子类型(例如货币、货币)。

    【讨论】:

    • 谢谢!我正在开发一个使用多个持久性单元的应用程序。来自一个持久性单元的实体与来自其他持久性单元的实体有关系。我在转换器背后的想法是让这种集成更容易。我不会使用基本属性,而是使用来自其他持久性单元的实体并让转换器为我加载实体。我不知道它是否有效,但我会尝试。我将在转换器中加载的实体有一个复合键。所以,我需要支持许多数据库列的转换器。
    • 我找到的解决方案是创建基本属性并稍后加载我的实体(并将其引用存储在使用@Transient 注释的属性中)。还有其他方法吗?
    • 我不会那样做的。如果您有多个持久性单元,那么您可以将服务层中的结果合并到一个域对象中,该域对象聚合来自两个持久性单元实体的数据。这是业务层的工作,而持久化数据是 Hibernate 的全部内容。
    • 这个 2014 年的答案似乎仍然相关。上游问题:github.com/eclipse-ee4j/jpa-api/issues/105
    • @VladMihalcea 但是如果您在服务层中处理结果的合并,那么这种关系将仅限于特定的服务(在绝大多数惯用设置中)。问题是寻求在实体层建立关系,这应该能够在您的代码库中更广泛地使用这种关系。
    【解决方案2】:

    DataNucleus JPA 对将属性映射到多个列有特定的支持,但这不是 JPA 规范的一部分(即供应商扩展)。

    无法将多个实体属性映射到一列(或多列)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-13
      • 2015-08-26
      • 2022-01-11
      • 2013-08-30
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 2015-09-20
      相关资源
      最近更新 更多