Почему бы вам не аннотировать id
GenericEntity с помощью @Id
?
Вы также не должны переопределять id
, а ставить @AttributeOverride(name = "id", column = @Column(name = "ID"))
в классе, а не в поле.
Edit:
Мы используем это в нашем базовом классе (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
.