Ho una classe astratta che fornisce alcune funzionalità comuni che alcune entità EJB ereditano. Uno di questi è una colonna timestamp.JPA Entity With Abstract Class Inheritance
public abstract class AbstractEntity {
...
private long lastModified;
...
@Column
public long getLastModified() {
return lastModified;
}
public void setLastModified(long ts) {
lastModified = ts;
}
}
e
@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());
}
}
Il problema è che la colonna timestamp non viene aggiunta alla tabella del database. C'è qualche annotazione che deve essere aggiunta a AbstractEntity in modo che gli ultimi campi modificati vengano ereditati come una colonna?
Ho provato ad aggiungere @Entity a AbstractEntity ma ciò ha causato un'eccezione durante la distribuzione.
org.hibernate.AnnotationException: No identifier specified for entity:
AbstractEntity
Molte grazie Kostha - l'annotazione '@ MappedSuperclass' era la soluzione che stavo cercando. – Dobbo
Prego :) C'è un'altra cosa che ho notato nel tuo codice, forse lo troverai utile - vedi la modifica. – kostja
Grazie ancora Kostja - la tua modifica è esattamente dove stavo andando. Come accade, devo modificare 'lastModified' come (alcuni) gli oggetti entità sono condivisi con il client e i dati vengono trasportati tramite XML e JAXB. – Dobbo