IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Super annotation ou partage de declaration JPA


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 59
    Par défaut Super annotation ou partage de declaration JPA
    Bonjour et bonne année à tous ,

    Dans notre projet, nous utilisons une sequence unique pour nos differentes entitées JPA.

    Nous avons donc un code similaire à celui pour une entité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      @Id
      @TableGenerator(name = "sequence_generator", table = "SEQUENCE_TABLE", pkColumnName = "NAME", valueColumnName = "NEXT_ID ", pkColumnValue = "GLOBAL", allocationSize = 1)
      @GeneratedValue(strategy = GenerationType.TABLE, generator = "sequence_generator")
      @Column(name = "user_id")
      private Long id;
    Il est tout a fait possible de reporter les 3 annotations (@Id, @TableGenerator et @GeneratedValue) sur les différentes entités cela devrait marcher sans problème.

    N'est-il toutefois pas possible de soit :
    - déclarer le table generator une fois pour toute et qu'il soit utilisable par toutes les entités sans le redeclarer
    - définir une "super" annotation qui permettrait de cumuler les 3 annotations (ex : @Id_FromGlobalSeq)

    Merci d'avance

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Pourquoi ne pas déclarer une super classe abstraite ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public abstract class Entite {
     
      @Id
      @TableGenerator(name = "sequence_generator", table = "SEQUENCE_TABLE", pkColumnName = "NAME", valueColumnName = "NEXT_ID ", pkColumnValue = "GLOBAL", allocationSize = 1)
      @GeneratedValue(strategy = GenerationType.TABLE, generator = "sequence_generator")
      @Column(name = "id")
      private Long id;
    Cela oblige néanmoins à ce que la colonne s'appelle toujours "id"...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 59
    Par défaut
    Citation Envoyé par herve91 Voir le message
    Pourquoi ne pas déclarer une super classe abstraite ?
    ...
    Cela oblige néanmoins à ce que la colonne s'appelle toujours "id"...
    Cette solution n'est pas possible pour la raison que tu cites, le schéma ne peut pas être retouché.

Discussions similaires

  1. annotations JPA -> tables créées mais pas peuplées lors du déploiement
    Par olivier57b dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 21/12/2008, 15h29
  2. [Framework] Spring IOC et JPA Annotation
    Par jujuz dans le forum Spring
    Réponses: 2
    Dernier message: 09/06/2008, 13h31
  3. Annotations JPA obligatoires
    Par quarky dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/05/2008, 16h26
  4. Réponses: 7
    Dernier message: 07/01/2008, 15h56
  5. [JPA][EJB3] The @JoinColumns on the annotated element
    Par *alexandre* dans le forum JPA
    Réponses: 9
    Dernier message: 19/02/2007, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo