javahibernateannotationsoverridingmappedsuperclass

Hibernate : How override an attribute from mapped super class


The generic entity, super class:

@MappedSuperclass
public abstract class GenericEntity {
    private Integer id;
    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}
}

The pojo:

@Entity
@Table(name = "POJO_ONE")
@SequenceGenerator(name = "HB_SEQ_POJO_ONE", sequenceName = "SEQ_POJO_ONE", allocationSize = 1)
public class PojoOne extends GenericEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "HB_SEQ_POJO_ONE")
    @Column(name = "ID")
    @AttributeOverride(name = "id", column = @Column(name = "ID"))
    private Integer id;

    @Override
    public Integer getId() {return id;}
}

I try to use thoses annotations : @AttributeOverride, @Id, ... but It doesn't work. Can you help me? I want to override the attribute "id" to specify another column name and a sequence by pojo/table. What is the best way to do that?


Solution

  • Try this, instead

    @MappedSuperclass
    public abstract class GenericEntity {
        protected Integer id;
        ...
    
        public Integer getId() {return id;}
        public void setId(Integer id) {this.id = id;}
    }
    
    
    @Entity
    @Table(name = "POJO_ONE")
    @SequenceGenerator(name = "HB_SEQ_POJO_ONE", sequenceName = "SEQ_POJO_ONE", allocationSize = 1)
    @AttributeOverride(name = "id", column = @Column(name = "ID"))
    public class PojoOne extends GenericEntity {
        // we should not define id here again
        ...
    
        @Override
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "HB_SEQ_POJO_ONE")
        public Integer getId() {return id;}
    }