【问题标题】:JPA target entity type based on column value基于列值的 JPA 目标实体类型
【发布时间】:2011-04-27 03:46:13
【问题描述】:

我正在尝试将一些旧代码从手工持久性迁移到 Hibernate。这里的问题是一个特殊的映射,其中目标实体类型/表由列值定义。

示例数据库表:

表“关系”:

  • id - 我的主键
  • parentType - 指定父类型的字符(例如,“I”表示 Item 表中的对象,“C”表示 Category 表中的对象)
  • parentId - parentType 表中的主键
  • childType - 指定子类型的字符
  • childId - 子表中的主键

问题是所有这些类型(例如 Item 或 Category)都有相同的抽象父对象,称为 GenericObject,它没有自己的表。继承是 TABLE_PER_CLASS。

不好的是,通过 parentId 或 childId 您无法分辨类型,id 在这些表中不是唯一的。您需要查看 parentType 和 childType。

现在我如何在 Hibernate 中映射这种疯狂?我希望将父项和子项映射到一个 GenericObject 变量,该变量实际上是 Item 或 Category 的一个实例。

有什么想法吗?

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    Hibernate 有 @Any@ManyToAny 注释,用于目标实体由类型和非唯一 id 标识的情况。

    我认为在你的情况下,由于父母和孩子都是这样识别的,你需要创建 Relation 实体,其与父母和孩子的关系用 @Any 注释。

    【讨论】:

    • 这可能是解决方案,但是如何使用它呢?任何使用 Any 或 ManyToAny 的尝试都会导致“java.lang.UnsupportedOperationException: any not supported yet”
    • @LubosD:从 Hibernate 3.5 开始,当通过 JPA 使用时,它被破坏了,尽管它仍然可以通过 SessionFactory 工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多