Inheritance with EJB3 Entity
omichalet Jun 13, 2006 6:37 AMHello,
I just wanted to introduce a superclass for all entities in my app. The goal was to define several common behaviour like creation and modification dates. The problem is that if I define a field timestampModification annotated with @Version in the superclass annotated with @MappedSuperclass, it doesn't seem to be inherited by the subclassing entities (it is ignored and its value is still null even after inserting or updating the entity).
If I define the attribute annotated with @Version in the subclass, it works. I think there's something wrong but what ?
Thank you for your answer.
Here is the code :
________________________________________________________
package fr.cpage.fmk.core.business.entity.impl;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.persistence.Version;
import fr.cpage.fmk.core.business.entity.CPageObject;
@MappedSuperclass
public class CPageEntity {
private String utilisateurCreation;
private String utilisateurModification;
@Column(columnDefinition = "TIMESTAMP")
private Timestamp timestampCreation;
@Column(columnDefinition = "TIMESTAMP")
@Version
protected Timestamp timestampModification;
public String getUtilisateurCreation() {
return this.utilisateurCreation;
}
public String getUtilisateurModification() {
return this.utilisateurModification;
}
public void setUtilisateurCreation(String utilisateurCreation) {
this.utilisateurCreation = utilisateurCreation;
}
public void setUtilisateurModification(String utilisateurModification) {
this.utilisateurModification = utilisateurModification;
}
public Timestamp getTimestampCreation() {
return this.timestampCreation;
}
public Timestamp getTimestampModification() {
return this.timestampModification;
}
public void setTimestampCreation(Timestamp timestampCreation) {
this.timestampCreation = timestampCreation;
}
public void setTimestampModification(Timestamp timestampModification) {
this.timestampModification = timestampModification;
}
}
________________________________________________________
package fr.cpage.fmk.demo1.business.entity.impl;
import java.io.Serializable;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import fr.cpage.fmk.core.business.entity.impl.CPageEntity;
import fr.cpage.fmk.demo1.business.entity.Visitor;
@Entity
public class VisitorEntity extends CPageEntity {
/**
* Le constructeur par défaut.
*
*/
protected VisitorEntity() {
// protected contructor
}
/**
* @param name le nom du visiteur
*/
public VisitorEntity(String name) {
this.name = name;
}
@Id
@GeneratedValue
private Long id;
private String name;
public Long getId() {
return this.id;
}
public void setId(Long poId) {
this.id = poId;
}
public String getName() {
return this.name;
}
public void setName(String poName) {
this.name = poName;
}
@Override
public String toString() {
return super.toString() + "[" + this.getName() + " ; " + this.getTimestampModification() + "]";
}
}