Hibernate @Inheritance,表作为父级,视图作为子级

2024-02-19

我在 Hibernate 中遇到这种情况,其中两个类之间存在父子关系,但数据库中没有这种关系,因为子类代表视图,而不是表。

现在的问题是,要让 Hibernate 满意继承注解 https://docs.oracle.com/javaee/7/api/javax/persistence/Inheritance.html需要提供,否则 Hibernate 将考虑一些默认值并尝试查找不存在的“dtype”列。

我尝试使用 TABLE_PER_CLASS 作为策略(默认为 SINGLE_TABLE),但在这种情况下,Hibernate 与与子类关联的视图进行某种联合,这在这里没有意义,并且会引发一些关于不存在的列——在表和视图中都存在的列,但无论如何。

问题是如何根据注释对其进行正确建模,或者如何在不生成涉及子实体的基础查询的情况下询问父实体。 (第二个问题被问到here https://stackoverflow.com/questions/2700680/table-per-subclass-inheritance-relationship-how-to-query-against-the-parent-cla。我还没有尝试,因为我希望有更好的解决方案。)

Edit:为了更好地说明解释,这里有一段相当于我的设置的代码:

@Entity
@Table(name = "PARENT")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class ParentEntity implements Serializable {
    // ...
}

@Entity
@Table(name = "PARENT_VIEW")
public class ChildEntity extends ParentEntity implements Serializable {
    // ...
}

看不懂模型。为什么要这样做?

如果“子”是“父”表上的一个视图,那么它并不是真正的子,也不应该像子一样进行建模。

即使视图是可修改的(例如,插入被插入到“父”表等中),这基本上只是自己做 hibernate 将为您做的事情(例如,对“子”的查询将有效地生成子集“父”元素)。

您想通过此视图结构实现什么目的?为什么决定需要以这种方式对其进行建模?

在我看来,解决方案是要么不将其建模为父子关系,要么使用 single_table 的继承类型并从子项中删除表注释(在休眠中使用正常的父子关系)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate @Inheritance,表作为父级,视图作为子级 的相关文章

随机推荐