¿Existe alguna manera de especificar secuencias distintas para cada tabla en Hibernate, si el ID está definido en una superclase mapeada?Especificación de secuencia distinta por tabla en Hibernar en las subclases
Todas las entidades en nuestra aplicación se extienden una superclase llamada DataObject
así:
@MappedSuperclass
public abstract class DataObject implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id")
private int id;
}
@Entity
@Table(name = "entity_a")
public class EntityA extends DataObject { ... }
@Entity
@Table(name = "entity_b")
public class EntityB extends DataObject { ... }
Esto hace que todas las entidades a utilizar una secuencia compartida, el valor predeterminado hibernate_sequence
.
Lo que me gustaría hacer es utilizar una secuencia separada para cada entidad, por ejemplo entity_a_sequence
y entity_b_sequence
en el ejemplo anterior. Si la ID se especifica en las subclases, entonces podría usar la anotación @SequenceGenerator
para especificar una secuencia para cada entidad, pero en este caso la ID está en la superclase. Dado que el ID está en la superclase, ¿hay alguna forma de que pueda usar una secuencia separada para cada entidad? Y si es así, ¿cómo?
(Estamos utilizando PostgreSQL 8.3, en caso de que sea relevante)
Sí, funciona! Probé algo similar, pero seguí obteniendo una 'org.hibernate.AnotationException: Unknown Id.generator: idgen'. Sin embargo, tu código funcionó bien; resulta que olvidé incluir el '@ SequenceGenerator' en una de las subclases en mi primer intento. Entonces la respuesta es que funciona, siempre y cuando cada subclase de entidad tenga la anotación @SequenceGenerator en ella. – gutch