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 :

Séquence pour id de la classe abstraite


Sujet :

JPA Java

  1. #1
    Membre confirmé Avatar de rgomes
    Homme Profil pro
    IT Developer JAVA Senior
    Inscrit en
    Juin 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : IT Developer JAVA Senior
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 128
    Par défaut Séquence pour id de la classe abstraite
    Hello,

    Comment gérer de façon élégante la déclaration de la séquence, en particulier le tag @GeneratedValue, lorsque l'id est déclaré dans une classe mère abstraite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @MappedSuperclass
    public abstract class AbstractEntity implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	private Integer entityId;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Entity
    @Table(name = "PARTENAIRE")
    @SequenceGenerator(name = "PARTENAIRE_SEQ")
    @AttributeOverrides({ @AttributeOverride(name = "entityId", column = @Column(name = "PARTENAIRE_ID")) })
    public class PartenaireEntity extends AbstractEntity {
    J'aimerais si possible éviter de mettre les annotations sur les getter (quelle est d'ailleurs la meilleure option getter ou variable ??) et d'avoir à overrider le getEntityId() à chaque fois..

    Merci pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Voila ce que j'avais utilisé dans mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @MappedSuperclass
    public abstract class AbstractEntity implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	@Id
            @Column(name="COL_ID_FACTICE")
            @SequenceGenerator(name = "PARTENAIRE_SEQ", sequenceName="PARTENAIRE_SEQ", allocationSize=1)
            @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="PARTENAIRE_SEQ")
    	private Integer entityId;
    Et puis dans tes classes filles, t'aurais un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Entity
    @Table(name = "PARTENAIRE")
    @AttributeOverrides({ @AttributeOverride(name = "COL_ID_FACTICE", column = @Column(name = "PARTENAIRE_ID")) })
    public class PartenaireEntity extends AbstractEntity {
    ...

  3. #3
    Membre confirmé Avatar de rgomes
    Homme Profil pro
    IT Developer JAVA Senior
    Inscrit en
    Juin 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : IT Developer JAVA Senior
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 128
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Voila ce que j'avais utilisé dans mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @MappedSuperclass
    public abstract class AbstractEntity implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	@Id
            @Column(name="COL_ID_FACTICE")
            @SequenceGenerator(name = "PARTENAIRE_SEQ", sequenceName="PARTENAIRE_SEQ", allocationSize=1)
            @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="PARTENAIRE_SEQ")
    	private Integer entityId;
    Et puis dans tes classes filles, t'aurais un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Entity
    @Table(name = "PARTENAIRE")
    @AttributeOverrides({ @AttributeOverride(name = "COL_ID_FACTICE", column = @Column(name = "PARTENAIRE_ID")) })
    public class PartenaireEntity extends AbstractEntity {
    ...

    Surtout pas, la classe abstraite ne peut avoir la définition de la séquence qui est différente pour chaque entité.

    J'ai trouvé la solution, il faut simplement :
    Dans la classe mère (AbstractEntity) :
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "MySequenceGenerator")

    Dans la classe fille :
    @Entity
    @SequenceGenerator(name = "MySequenceGenerator", sequenceName = "<nom de la séquence>")

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Tant mieux si ta solution a marché, moi dans mon cas, effectivement c'est parceque j'avais la même séquence pour toutes les classes filles, ce qui me parait logique quand on hérite, c'est qu'on a en commun des propriétés identifiantes comme l'ID, sinon dans ton cas un Embedded d'attributs partagés aurait suffi. Mais bon tant mieux si ça marche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. constructeur pour classe abstraite
    Par manguigs dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 28/06/2013, 22h32
  2. Réponses: 1
    Dernier message: 13/04/2012, 16h11
  3. boost.python : générer les conversions to_python pour des classes abstraites
    Par Blustuff dans le forum Interfaçage autre langage
    Réponses: 2
    Dernier message: 02/08/2011, 11h08
  4. encapsulation pour les classes abstraites
    Par anikashow dans le forum C++
    Réponses: 7
    Dernier message: 22/03/2011, 14h54
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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