Est-il possible d'ajouter des annotations JPA à la super-classe des variables d'instance?
Je suis de la création d'entités qui sont les mêmes pour les deux tables différentes. Afin de ne mappages de table etc. différentes pour les deux entités, mais seulement avoir le reste du code dans un seul endroit - un résumé de la superclasse. La meilleure chose serait d'être capable d'annoter générique des choses telles que les noms de colonne (depuis le seront identiques) dans la super classe mais qui ne fonctionne pas parce que les annotations JPA ne sont pas héritées par les classes enfant. Voici un exemple:
public abstract class MyAbstractEntity {
@Column(name="PROPERTY") //This will not be inherited and is therefore useless here
protected String property;
public String getProperty() {
return this.property;
}
//setters, hashCode, equals etc. methods
}
Qui je tiens à hériter et précise seulement l'enfant, les choses spécifiques, comme les annotations:
@Entity
@Table(name="MY_ENTITY_TABLE")
public class MyEntity extends MyAbstractEntity {
//This will not work since this field does not override the super class field, thus the setters and getters break.
@Column(name="PROPERTY")
protected String property;
}
Des idées ou vais-je avoir à créer des champs, des getters et setters dans les classes enfant?
Grâce,
Kris
Vous devez vous connecter pour publier un commentaire.
Vous pourriez souhaitez annoter MyAbstractEntity avec
@MappedSuperclass
classe de sorte que hibernate importation de la configuration de MyAbstractEntity de l'enfant et vous n'aurez pas à remplacer le champ, il suffit d'utiliser de la société mère. Cette annotation est le signal pour hibernate qu'il a à examiner la classe parent trop. Sinon, il suppose qu'il peut l'ignorer.Voici un exemple avec quelques explications qui pourront vous aider.
@MappedSuperclass:
@Héritage spécifie l'une des trois stratégies de cartographie:
@DiscriminatorColumn est utilisé pour définir la colonne qui sera utilisée pour distinguer entre les objets enfants.
@DiscriminatorValue est utilisé pour spécifier une valeur qui est utilisée pour distinguer un objet enfant.
Le code ci-dessous dans la suite de:
Vous pouvez voir que le champ id est dans les deux tables, mais n'est spécifiée dans le AbstractEntityId @MappedSuperclass.
Aussi, l' @DisciminatorColumn est montré comme PARTY_TYPE dans la Partie de tableau.
L' @DiscriminatorValue est indiqué en tant que Personne comme un enregistrement dans la PARTY_TYPE colonne de la table.
Est très important, le AbstractEntityId classe ne comprend pas obtenir a persisté à tous.
Je n'ai pas précisé annotations @Column, mais simplement en s'appuyant sur les valeurs par défaut.
Si vous avez ajouté une Organisation de l'entité qui s'étendait Partie et si c'était a persisté suivant, puis sur la table aurait:
L'Organisation de la table de la première entrée aurait:
Espère que cela aide 🙂
Marque de la super-classe comme
et de retirer le bien de la classe enfant.
L'annotation de la classe de base avec
@MappedSuperclass
faire exactement ce que vous voulez.