Hibernate:如何覆盖映射超类中的属性

Bas*_*der 16 java overriding annotations hibernate mappedsuperclass

通用实体,超类:

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

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;}
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用thoses注释:@AttributeOverride,@ Id,...但它不起作用.你能帮助我吗?我想覆盖属性"id"以通过pojo/table指定另一个列名和序列.最好的方法是什么?

Ade*_*ari 28

试试吧,相反

@MappedSuperclass
public abstract class GenericEntity {
    private 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;}
}
Run Code Online (Sandbox Code Playgroud)

  • 这里的答案 - http://stackoverflow.com/questions/8589928/mappedsuperclass-change-sequencegenerator-in-subclass 提供了我认为稍微更好的方法,因为它重复的代码更少。 (2认同)