私は、継承するいくつかのEJBエンティティに共通するいくつかの共通の機能を提供する抽象クラスを用意しています。これらの1つはタイムスタンプ列です。抽象クラス継承を持つJPAエンティティ
public abstract class AbstractEntity {
...
private long lastModified;
...
@Column
public long getLastModified() {
return lastModified;
}
public void setLastModified(long ts) {
lastModified = ts;
}
}
と
@Table
@Entity
public class MyEntity extends AbstractEntity {
...
private Long key;
private String value;
...
@Id
public Long getKey() {
return key;
}
public void setKey(Long k) {
key = k;
}
@Column
public String getValue() {
return value;
}
public void setValue(String txt) {
value = txt;
setLastModified(System.currentTimeMillis());
}
}
問題は、タイムスタンプ列は、データベーステーブルに追加されていないことです。 lastModifiedフィールドを列として継承するために、AbstractEntityに追加する必要がある注釈がありますか?
@EntityをAbstractEntityに追加しようとしましたが、展開時に例外が発生しました。
org.hibernate.AnnotationException: No identifier specified for entity:
AbstractEntity
多くのありがとうコスタ - '@ MappedSuperclass'アノテーションは私が探していた解決策でした。 – Dobbo
あなたは歓迎です:)私はあなたのコードで気づいたことがもう1つあります。おそらくそれが役に立つと思うかもしれません - 編集を見てください。 – kostja
もう一度ありがとうKostja - あなたの編集は私が行っていた場所です。それが起きると、(最後の)エンティティオブジェクトがクライアントと共有され、XMLとJAXBを介してデータが転送されるため、自分自身をlastModifiedに変更する必要があります。 – Dobbo