1

现在我们有一个JPA entity定义为:

@Entity
@Table(name="Foo")
public class Foo extends ParentClass {
...
}

想象一些Foo对象已经被持久化在数据库中。以编程方式将这些持久记录更改为 type 的兄弟子类的最佳方法是Bar什么?

@Entity
@Table(name="Bar")
public class Bar extends ParentClass {
...
}

我们不想改变数据库模式,只想改变已经持久化Foo对象的实体类型。我希望有一种比我唯一想到的方法更好的方法,即手动抓取Foo对象、重新映射到Bar并重新持久化。

4

1 回答 1

1

特别是我更喜欢使用纯 SQL 迁移来完成它。在我的公司,我们使用liquibase来版本化我们的数据库模式。因此,要进行迁移,我们只需为其创建更改日志。

有人认为这不是最好的解决方案,但我发现它简单且功能强大。在我看来,对于大型项目,这是要走的路。


编辑:

现在我看到您无法更改架构。我认为这不可能以一种简单的方式以编程方式实现。您将需要 Foo 和 Bar 之间的某种“TransformerService”,它只是复制公共父字段,删除旧的Foo并保留新的Bar

我要做的是打破层次结构和组件化ParentClass,因此您只能在Fooand之间传输它Bar,反之亦然。这样您就不需要复制字段或类似的东西。它可能需要大量重构,但组件化比创建大/复杂的层次结构要好。

或者您可以直接在数据库中运行直接更改对象的 SQL。这很丑陋,但这是我认为你可以做这样的事情的唯一方法。

于 2013-01-25T17:02:08.740 回答