動機
私のアプリは、テーブル foo の内容に基づいて Web サービスにリクエストを送信します。これらのリクエストを(データベースに)記録したいと思います。また、それらを作成するために使用された foo の行の値も記録したいと思います。それでも、テーブル foo のデータは時間の経過とともに変化する可能性があるため、行の正確な内容 (ID ではなく) をログに記録する必要があります。私はHibernateを使用しているので、リクエストを表すエンティティにfooの行を埋め込むことができると思いました。クリーンなクラス階層を作成するには、次のようなものが必要です。
class Foo
{
/*
* Here goes some properties of Foo, which specify columns names etc.
*/
}
@Embeddable
class EmbeddableFoo extends Foo
{
//EmbeddableFoo should have the same properties as Foo
}
@Entity
class EntityFoo extends Foo
{
@Id
Long getId() { //EntityFoo has some id }
//EntityFoo should have the same properties as Foo, except that
//it has id
}
問題
EmbeddableFooはFooのプロパティを認識しないため、これは機能しません。EntityFooがFooのプロパティを*見る*ように、Fooに@Inheritanceアノテーションを追加できますが、 EmbeddableFooに関する問題は解決しません。
質問
@Embeddableと @Entity* を同じクラスから継承させる簡単な (つまり、冗長なコードをたくさん書く必要がない) 方法はありますか?