现在我们有一个 JPA 实体
定义为:
@Entity
@Table(name="Foo")
public class Foo extends ParentClass {
...
}
假设一些 Foo
对象已经保存在数据库中。以编程方式将这些持久记录更改为 Bar
类型的同级子类的最佳方法是什么?
@Entity
@Table(name="Bar")
public class Bar extends ParentClass {
...
}
我们不想更改数据库架构,只想更改已保存的 Foo
对象的实体类型。我希望有一种比我想到的唯一方法更好的方法,即手动抓取 Foo
对象,重新映射到 Bar
,然后重新持久化。
最佳答案
我特别喜欢使用纯 SQL 迁移来完成此操作。在我的公司,我们使用 liquibase来版本化我们的数据库模式。因此,为了进行迁移,我们只需为其创建变更日志。
有些人认为这不是最好的解决方案,但我发现它简单且非常强大。在我看来,对于大型项目来说,这是必经之路。
<小时/>编辑:
现在我发现您无法更改架构。我认为这不可能以简单的编程方式实现。您需要在 Foo 和 Bar 之间使用某种“TransformerService”,它只需复制公共(public)父字段,删除旧的 Foo
并保留新的 Bar
。
我要做的就是打破层次结构并组件化 ParentClass
,这样您就可以在 Foo
和 Bar
之间仅传输它,反之亦然。这样您就不需要复制字段或类似的内容。它可能需要大量重构,但组件化比创建大/复杂的层次结构更好。
或者您可以直接运行 SQL 来更改数据库中的对象。这很丑陋,但这是我认为你可以做这样的事情的唯一方法。
关于java - 将持久化实体更改为同级子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14526654/