Est-il possible de construire une entité JPA par l'extension d'un POJO?
Permet de dire que j'ai le texte suivant POJO:
public class MyThing {
private int myNumber;
private String myData;
//assume getter/setter methods
}
Est-il maintenant possible d'étendre cette POJO comme une entité JPA?
@Entity
@Table(name = "my_thing")
public class MyThingEntity extends MyThing implements Serializable {
@Column(name = "my_number")
//?????????
@Column(name = "my_data")
//????????
}
Je veux garder le POJO distincte de l'entité JPA. Le POJO vit dans un projet différent et est souvent utilisé sans une couche de persistance, mon projet veut persister dans une base de données et de le faire sans l'aide de la cartographie à partir d'un POJO à une entité et à l'arrière.
Je comprends que des entités JPA sont des Pojo, mais pour les utiliser il me faudrait inclure une bibliothèque qui implémente javax.la persistance et les autres projets à l'aide de la même objet de base n'ont aucune utilité pour une couche de persistance.
Est-ce possible? Est-ce une bonne idée?
Vous devez vous connecter pour publier un commentaire.
Spécification JPA états
@javax.la persistance.MappedSuperclass annotation vous permet de définir ce type de cartographie
Et
Comme l'a dit par la spécification JPA
Et
Si vous avez besoin de remplacer certains biens définis par MyThing, utilisez @AttributeOverride (lorsque vous voulez remplacer une seule propriété) ou @AttributeOverrides (lorsque vous voulez remplacer plus d'une propriété)
Et
Si vous ne voulez pas changer votre classe de base, vous pouvez utiliser le format xml pour le définir comme @MappedSuperClass
Attention: par défaut, le fournisseur de persistance dans le répertoire META-INF pour un fichier nommé orm.xml
Rien d'autre. Si vous souhaitez remplacer une propriété, utilisez @AttributeOverride comme indiqué ci-dessus
@MappedSuperclass MyThingMapper extends MyThing .... MyThingEntity extends MyThingWrapper
myNumber
la clé primaire deMyThingEntity
?@AttributeOverride
est utilisé pour les colonnes?META-INF
est situé danssrc/main/resources/META-INF
. 2)@AttributeOverride
n'est pas nécessaire si vous êtes bien avec les noms d'attribut, le nom des colonnes.attributeOverride
est utilisé pour myData1 et myData2. Cependant, ces champs n'existent pas dans la classe parentMyThing
. De ce que je peux voir dans la javadoc qui ne serait pas valideIl est possible:
orm.xml
(conforme à la orm schéma), et de mapper les colonnes de votre POJO, sans même l'étendre. Il sera JPA-activé dans un environnement et d'un POJO dans l'autreCela dit, je ne pense pas qu'il est nécessaire pour ce faire. Seulement d'annoter vos POJO, et ajouter à la compilation de la dépendance du temps pour vos projets. Ensuite, chaque projet doit décider si elle va les utiliser comme des entités JPA ou pas.