Hibernate:如何覆盖映射超类的属性
通用实体,超类:
@MappedSuperclass public abstract class GenericEntity { private Integer id; public Integer getId() {return id;} public void setId(Integer id) {this.id = id;} }
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;} }
我尝试使用thoms注释:@AttributeOverride,@ Id,…但它不起作用。 你可以帮我吗? 我想覆盖属性“id”以通过pojo / table指定另一个列名和序列。 最好的方法是什么?
试试吧,相反
@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;} }
你为什么不用@Id
注释GenericEntity的id
? 您也不应该重新定义id
而是将@AttributeOverride(name = "id", column = @Column(name = "ID"))
放在类而不是字段上。
编辑:
我们在我们的基类中使用它( package.OurTableGenerator
是我们自己的实现):
@GeneratedValue ( generator = "ourTableGenerator", strategy = GenerationType.TABLE ) @GenericGenerator ( name = "ourTableGenerator", strategy = "package.OurTableGenerator", parameters = { @Parameter ( name = OurTableGenerator.TABLE_PARAM, value = "t_sequence" ), @Parameter ( name = OurTableGenerator.SEGMENT_COLUMN_PARAM, value = "c_entity" ), @Parameter ( name = OurTableGenerator.VALUE_COLUMN_PARAM, value = "c_nextHi" ), @Parameter ( name = OurTableGenerator.INCREMENT_SIZE_COLUMN_PARAM, value = "c_blocksize" ) } ) @Id @Column(name = "c_uid") private Long uid;
这让我们指定每个实体/表的差异块大小和序列。
对于您自己的表生成器,您可以org.hibernate.id.TableGenerator
。