Specifying distinct sequence per table in Hibernate on subclasses
Have you tried doing it this way ?
@MappedSuperclasspublic abstract class DataObject implements Serializable { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idgen") @Column(name = "id") private int id;}@Entity@SequenceGenerator(initialValue = 1, name = "idgen", sequenceName = "entityaseq")@Table(name = "entity_a")public class EntityA extends DataObject { }@Entity@SequenceGenerator(initialValue = 1, name = "idgen", sequenceName = "entitybseq")@Table(name = "entity_b")public class EntityB extends DataObject {}
I'm sorry I don't have the required environment to test it right now but I'll try it later.
We use this in the abstract superclass of all of our JPA entities:
@Id@GeneratedValue(generator = "pooled")@GenericGenerator(name = "pooled", strategy = "org.hibernate.id.enhanced.TableGenerator", parameters = { @org.hibernate.annotations.Parameter(name = "value_column_name", value = "sequence_next_hi_value"), @org.hibernate.annotations.Parameter(name = "prefer_entity_table_as_segment_value", value = "true"), @org.hibernate.annotations.Parameter(name = "optimizer", value = "pooled-lo"), @org.hibernate.annotations.Parameter(name = "increment_size", value = "100")})private Long id;
It's a bit verbose, but it allows setting the prefer_entity_table_as_segment_value
which means you don't need to repeat the id
field or the generator annotations in the subclasses.
IHMO there is better way to do this:
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private int id;
It works in my app.