泛型实体,超类:
@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;}
}
我尝试使用这些注释:@AttributeOverride,@Id,...但它不起作用。你能帮帮我吗?我想通过覆盖属性"id“来指定另一个列名和pojo/table的序列。做到这一点的最好方法是什么?
发布于 2011-03-10 18:05:32
试试这个吧。
@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;}
}
发布于 2011-03-10 18:01:05
为什么不用@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
。
https://stackoverflow.com/questions/5257921
复制相似问题