使用Hibernate联接子类,是否可以在超级表和子表中复制列,并使它们保持同步?

| 所以我有一个有趣的情况。我继承了一大堆代码,原始开发人员决定放弃继承而使用枚举和switch语句...这是此反模式的完美示例,现在该重构了,我已经决定最好的解决方法是拔出由具有共享列的表支持的超类,然后使用联接的子类继承策略。到目前为止,一切都很好... 现在最棘手的部分是该代码已被部署到生产系统中。因此,我的重构代码必须与那里的模式/数据向后兼容,并且直到将来的一个版本发布之前,我都无法从子类表中删除冗余列。不管喜欢与否,我将在一个发布周期的父表和子表之间复制列。 对我来说幸运的是,当hibernate看到父表和子表之间存在重复的列时,它不会翻转。但是坏消息是它不会更新两个表中的重复列。父表中的列已更新,但子表中的列已过时。 为了与当前代码向后兼容,我希望两个表中的列都进行更新。这样,如果我们必须回滚发行版并回到旧模式,对实体的更新不会丢失。虽然我知道我可以通过触发器来解决这个问题,但我正在寻找一种仅代码解决方案,因为触发器具有在雷达下飞行的讨厌习惯。 有没有人可以告诉我一种说服休眠方式同时进入这两列的方法? 我的课程的一个非常人为的例子是:
@Entity
@Table(name = \"superclass\")
@Inheritance(strategy = InheritanceType.JOINED)
public class SuperClass {

    @Id @Generated
    Long id;
    boolean duplicate;
}

@Entity
@Table(name = \"subclass\")
public class SubClass extends SuperClass {
    String otherProperty;
}
与表匹配:
CREATE TABLE superclass (
    id INT PRIMARY KEY AUTO_INCREMENT,
    duplicate BOOLEAN
);

CREATE TABLE subclass (
    id INT NOT NULL,
    duplicate BOOLEAN,
    otherProperty VARCHAR(255),
    FOREIGN KEY (id) REFERENCES superclass(id)
);
插入新的SubClass实体时,子类表上的重复列将为NULL。 谢谢一群!     
已邀请:
如何在代码中定义两个属性,将一个属性映射到每一列,然后使它们在代码中保持同步?一个是不动产,一个是阴影属性。它虽然不漂亮,但应仅限于一个类(或一个类及其超类)的实现。 当您能够删除列时,可以删除shadow属性。     

要回复问题请先登录注册