java - 在 Hibernate 继承映射策略中绕过 "Table per Concrete Class"

标签 java hibernate inheritance

在我的java中,我有一个通用类(可以是抽象的或非抽象的,但不映射到数据库中的表)。它具有一个或多个每个类共有的变量。示例:

public class GenericThing {
    private Date createDate;
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date dt) {
        createDate = dt;
    }
}

这很有用,因为实际上数据库中的每个表都有 CREATE_DATE 列。

在这种情况下,在 Hibernate 中使用的正确继承策略是“每个具体类一个表”。但是,他们说,这是“不好的”,因为每个表都需要相同的列,如果您更改该列名称(CREATE_DATE),则必须更改每个表的列名称。嗯,显然这是真的,但是还有什么选择呢?显然,我确实希望数据库中的每个表都存储创建日期,但我不希望整个数据库中的每个对象都在一个表中,这样就排除了(据我所知)所有其他映射策略,对吧?

最佳答案

实际上,对于您的用例,使用每个具体类一个表策略没有任何问题

您试图解决的问题不是在架构级别(创建表时)创建任何冗余。即使我们以反向模式进行实体建模,这也没有问题。事实上,create_date 特定于每个表的每一行。

每个具体类表仅在处理正常继承时才建议,例如用户 -> 客户 -> 供应商,其中每个扩展类都是一种父类,并且添加了特定的额外属性子类不需要在所有表中重复(这种情况建议使用Join Table策略)

关于java - 在 Hibernate 继承映射策略中绕过 "Table per Concrete Class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692256/

相关文章:

java - 仅更改可编辑 JComboBox 的文本字段背景颜色

java - 在 JavaME : how to optimize it? 中实现阻塞队列

java - 在 OpenSessionInViewFilter 之后没有定义名为 'sessionFactory' 的 bean

c++ - C++静态成员的多态与继承

c# - 没有从派生到基础类的装箱转换

Java 内部类和继承 : Is there a duplicate outer this reference?

java - switch 中的新实例

Java : Displaying time in UTC

java - Spring MVC JPA 惰性异常

java - 在 hibernate 中加载相关对象