现在我们将JPA entity
定义为:
@Entity
@Table(name="Foo")
public class Foo extends ParentClass {
...
}
想象一下,一些Foo
对象已经存在于数据库中。以编程方式将这些持久化记录更改为Bar
类型的同级子类的最佳方法是什么?
@Entity
@Table(name="Bar")
public class Bar extends ParentClass {
...
}
我们不想要更改数据库架构,只想更改已持久的Foo
对象的实体类型。我希望有一种比我想到的唯一更好的方法,即手动抓取Foo
个对象,重新映射到Bar
,然后重新保持。
答案 0 :(得分:1)
特别是我更喜欢使用纯SQL迁移。在我的公司中,我们使用liquibase来版本化我们的数据库模式。因此,要进行迁移,我们只需为其创建更改日志。
有些人认为这不是最好的解决方案,但我发现它简单而且非常强大。在我的观察中,对于大型项目来说,这是可行的方法。
编辑:
现在我发现你无法改变架构。我不认为这可以通过编程方式轻松实现。你需要在Foo和Bar之间使用一些“TransformerService”,只需复制公共父字段,删除旧的Foo
并保留新的Bar
。
我要做的是打破层次结构并将ParentClass
组件化,因此您只能在Foo
和Bar
之间进行转移,反之亦然。这样您就不需要复制字段或类似的东西了。它可能需要大量的重构,但组件化比创建大/复杂的层次结构更好。
或者您可以运行直接在数据库中更改对象的SQL。这很难看,但这是我看到你能做到这一点的唯一方式。