我如何重构hibernate实体?

时间:2017-12-29 17:52:25

标签: java hibernate refactoring

我的用例如下:我继承了一个使用hibernate的项目。我现在关注的实体是,为了本练习的目的,关闭修改。该练习的目的是将遗留实体的使用替换为更适合新要求的不相关实现。

目标是能够将功能从旧实体移动到新的增量

原样,遗留实体的使用类似于

    //...

    final Session currentSession = sessionFactory().getCurrentSession();
    {
        LegacyEntity oldAndBusted = get(currentSession, "12345");

        oldAndBusted.change(...);

        put(oldAndBusted);  
    }
}   

LegacyEntity get(final Session currentSession, String businessId) {
    return (LegacyEntity) currentSession        
        .createQuery("from PurpleMonkeyDishwasher where businessId = ?")
        .setParameter(0, "12345")
        .uniqueResult();
}

void put(final Session currentSession, LegacyEntity changed) {
    currentSession.saveOrUpdate(changed);
}

在某些hbm.xml文件中隐藏了配置魔法

<class name="LegacyEntity" table="PurpleMonkeyDiswasher">
    <!-- stuff -->
</class>

如何为映射到同一个表的新实体安排类似代码

BuzzwordCompliantEntity get(final Session currentSession, String businessId);
void put(BuzzwordCompliantEntity changed);

不破坏仍在同一进程中使用LegacyEntity的代码路径?

1 个答案:

答案 0 :(得分:0)

&#34;为了本练习的目的,我现在关注的实体不接受修改。 ...目标是能够逐步将功能从旧实体移动到新实体。&#34;我觉得这很矛盾。当用另一个类替换类时,我总是通过以下方式获得成功:1)逐步将旧类API更改为新类API的子集,2)将旧类型重命名为与新类具有相同的名称和包, 3)删除旧类(我们在步骤2中重命名)。在完成所有这些工作的同时,我尽可能地依赖IDE的重构功能。