2 Replies Latest reply on Jun 13, 2006 8:57 AM by Olivier Michalet

    Inheritance with EJB3 Entity

    Olivier Michalet Newbie

      Hello,
      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() + "]";
      }
      }