2012-05-03 4 views
2

を無視する/無効にすることができますid列を含むテーブル今、私は私が「ID」列を(それは識別子 'と呼ばれる列を持っている)持っていますが、原因architecural制約はありませんMyClassDTOにマッピングされたテーブルを持って見つけるにHibernate注釈どのように継承されたID部材

BaseDTO->DBAbstractClass1->DBAbstract2->MyClassDTO 
BaseDTO->DBAbstractClass1->DBAbstract3->AnotherADTO 
BaseDTO->DBAbstractClass2->DBAbstract4->AnotherBDTO 

など

すなわち 、通常の原因ごとにexending:

[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 : How override an attribute from mapped super class に何かsimlarを見ましたが、私は私の正確な問題を解決するかどうかはわかりません。

おそらく単純なオーバーライドですが、副作用がないように注意してください。 受取人は?

答えて

0

スーパークラスのこれらの変更を使用して、サブクラスでオーバーライドをお試しください。

@MappedSuperclass 
public abstract class BaseDTO 
{ 

    public int id; 
    public int getId() { 
     return id;} 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    public void setId(int id) { 
     this.id = id;} 
} 
+0

公共int型\t \t ID; ' \t' Id' \t '@GeneratedValue(戦略= GenerationType.AUTO)@' \t '民間長いother_id;'とtを得ました彼はエラーに続いて失敗しましたInitial SessionFactory creation failed.org.hibernate.AnnotationException:エンティティに指定された識別子がありません:com.mine.something.AnotherDTO –

1

私はこれに対して単純で洗練された解決法を見つけませんでした。

私が行ったことは、2つのHelperDTOクラスを作成するために階層を逆にすることです。もう1つは、もう一方は拡張し、もう1つはidプロパティを含みます。 HelperDTOは、ID部材を持っていないとHelperWithIdDTOは、ID部材を有する すなわち

HelperDTO->MyClassDTO (classes that do not use id) 

HelperDTO->HelperWithIdDTO->OtherDTO (classes that use id) 
あなたは上記尋ねた、と `Transient` @ \t` derviedクラスに以下を追加しましたように私がやった
関連する問題