IDを列にマップするユーティリティ基本クラスから拡張しています
@MappedSuperclass
public abstract class BaseDTO
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int id;
public int getId() {
return id;}
public void setId(int id) {
this.id = id;}
}
このクラスは、id 列を含むテーブルへのアクセスと操作を簡素化するために、多くの派生クラスで使用されます。すなわち
BaseDTO->DBAbstractClass1->DBAbstract2->MyClassDTO
BaseDTO->DBAbstractClass1->DBAbstract3->AnotherADTO
BaseDTO->DBAbstractClass2->DBAbstract4->AnotherBDTO
等
ここで、「id」列を持たない MyClassDTO にマップされたテーブルがあることがわかりました (「identifier」という列があります) が、アーキテクチャの制約により、通常の原因に従って拡張されます。
[org.hibernate.util.JDBCExceptionReporter] SQL Error: 1054, SQLState: 42S22
[org.hibernate.util.JDBCExceptionReporter] Unknown column 'this_.id' in 'field list'
id メンバーを @Transient としてオーバーライドし、新しい @Id などを追加しようとしましたが、常に上記のエラーが発生します。
継承された id を「無視」または置換する方法を見つけるか、継承されたクラスをコピーして BaseDTO を拡張しないようにする必要があります。これは、優れたプログラマーが避けるべきことです。
Hibernateで似たようなものを見たことが あります: マップされたスーパークラスから属性をオーバーライドする方法ですが、 それが私の正確な問題を解決するかどうかはわかりません。
おそらく単純なオーバーライドですが、副作用がないことに注意してください。テイカーはいますか?