2

私は次のクラスのセットを持っています

@Embeddable
public class SharedClass {
    ...
    private String legacyField;
    ...
}

@Entity
public class LongStandingEntity {
    ...
    private SharedClass sharedClass;
    ...
}

古いオブジェクトにいくつかlegacyfieldの古いデータを保存しますが、新しいオブジェクトについては収集されません。ただし、古いデータに引き続きアクセスできるようにする必要があります。

私はまたを利用する新しいエンティティを作成していますSharedClass

@Entity
public class NewEntity {
    ...
    private SharedClass sharedClass;
    ...
}

必要はありません。legacyFieldマッピングを機能させながら、データベースに列を追加する必要はありませんLongStandingEntity

これはJPAアノテーションで可能ですか?

4

3 に答える 3

1

それを助けることができる特定の注釈を思い出しません。それでも、私はむしろこの状況で設計アプローチを取りたいと思います。特定のクラスにのみ属するフィールドがある場合は、古いデータにのみ関連付けられている別の埋め込みクラスにそれらを分離します。

エンティティを明確に区別するためだけに、私にとってはよりクリーンなアプローチのようです。

于 2012-09-28T17:25:39.400 に答える
1

私が見つけた回避策の1つは、パラメーターinsertable=falseおよびupdatable=falseとの関連付けをオーバーライドすることです。

@Entity
public class NewEntity {
    ...
    @Embedded
    @AssociationOverride(name = "legacyField", joinColumns = @JoinColumn(insertable = false, updatable = false))
    private SharedClass sharedClass;
    ...
}
于 2016-04-12T11:30:48.517 に答える
1

私は次のように問題を修正しました

@Entity
public class NewEntity {
    ...
    @AttributeOverrides({
        @AttributeOverride(name = "legacyField", column =  @Column(insertable = false, updatable = false))
    })
    @Embedded
    private SharedClass sharedClass;
    ...
}

更新しますが、エンティティを読み取るときにエラーが発生します:列new_entity_.legacyFieldが文字1504に存在しません

したがって、問題は修正されません

于 2021-01-14T16:39:41.377 に答える