簡體   English   中英

將持久化實體更改為同級子類

[英]Change a persisted entity to a sibling subclass

現在,我們有一個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 ,然后重新持久化。

特別是我更喜歡使用純SQL遷移來做到這一點。 在我的公司中,我們使用liquibase來版本數據庫架構。 因此,要進行遷移,我們只需為其創建更改日志。

有人認為這不是最佳解決方案,但我發現它簡單且功能強大。 在我看來,對於大型項目而言,這是必經之路。


編輯:

現在,我看到您無法更改架構。 我認為這不可能以編程方式輕松實現。 您將需要在Foo和Bar之間使用某種“ TransformerService”,它可以簡單地復制公共父字段,刪除舊的Foo並保留新的Bar

我要做的是打破層次結構,將ParentClass組件化,因此您只能在FooBar之間轉移它,反之亦然。 這樣,您將不需要復制字段或類似的內容。 它可能需要大量的重構,但是組件化比創建大型/復雜的層次結構更好。

或者,您可以運行直接在數據庫中更改對象的SQL。 這很丑陋,但這是我看到您可以執行類似操作的唯一方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM