Spécification de la séquence distincte par table dans Hibernate sur les sous-classes
Est-il un moyen de spécifier les séquences distinctes pour chaque tableau de mise en veille prolongée, si l'ID est défini sur un mappé superclasse?
Toutes les entités de notre application s'étendent d'une super-classe appelée DataObject
comme ceci:
@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 { ... }
Cela provoque toutes les entités d'utiliser une séquence partagée, la valeur par défaut hibernate_sequence
.
Ce que je voudrais faire est d'utiliser une séquence distincte pour chaque entité, par exemple, entity_a_sequence
et entity_b_sequence
dans l'exemple ci-dessus. Si l'identité a été spécifié sur la sous-classes alors que je pouvais utiliser la @SequenceGenerator
annotation pour spécifier une séquence pour chaque entité, mais dans ce cas, l'ID est sur la super-classe. Étant donné que l'ID est dans la super-classe, est-il une manière que je peux utiliser une séquence distincte pour chaque entité et, si oui, comment?
(Nous utilisons PostgreSQL 8.3, dans le cas où c'est pertinent)
source d'informationauteur gutch
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de le faire de cette façon ?
Je suis désolé je n'ai pas l'environnement adéquat pour le tester dès maintenant, mais je vais essayer plus tard.
Nous utilisons dans l'abstrait super-classe de toutes nos entités JPA:
C'est un peu verbeux, mais il permet de fixer les
prefer_entity_table_as_segment_value
qui signifie que vous n'avez pas besoin de répéter lesid
champ ou le générateur d'annotations dans les sous-classes.De génération de TABLE de stretergy utilise db distinct de séquence pour chaque tablemais il est peu coûteux
IHMO il y a une meilleure manière de faire ceci:
Il fonctionne dans mon application.