J'ai une entité:JPA Hibernate 5: OneToOne dans intégrable imbriquée provoque problème de métamodèle
@Entity
public class Test {
@Embedded
Content content;
// getters setters..
}
Ce contient une classe intégrée que vous pouvez voir:
@Embeddable
public class Content {
@OneToOne
Person person;
@Embedded
Language language;
// getters setters..
}
Il contient à nouveau une intégrable. 2 fois emboîtées intégrable
@Embeddable
public class Language {
String format;
@OneToOne
IdentifierCode identifierCode;
// getters setters..
}
Lorsque vous utilisez la fonction de génération automatique de schéma de JPA toutes les colonnes sont générées de manière correcte.
J'utilise l'annotation @data sur chaque @Entity et @Embeddable pour générer des getters, setters, constructeurs, etc ..
Lors du démarrage du serveur d'applications (EAP 7), je remarque cet avertissement dans les journaux:
HHH015011: Impossible de trouver le champ métamodèle statique: org.package.Language_ # identifierCode; cela peut ou peut ne pas indiquer un problème avec le métamodèle statique
En effet, lors de l'ouverture de la classe métamodèle Language_; aucune référence de colonne identificateurCode est présent:
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Language.class)
public abstract class Language_ {
public static volatile SingularAttribute<Language, String> format;
}
Je ne vois pas ce que je fais wroing. Est-il impossible d'utiliser @OneToOne dans un @Embeddable imbriqué? Le métamodèle Content_ génère correctement l'attribut singulier pour la personne!
Il semble que lorsque vous utilisez plusieurs Embeddables imbriqués, quelque chose ne va pas. Lorsque vous utilisez un seul niveau d'embeddables, cela fonctionne.
J'ai essayé d'autres choses:
- Ajout Access.Field sur la classe. Rien ne se passe.
- Instancier la classe @Embedded, comme @Embedded Language language = new Language(). Rien ne se passe.
- Remplacé le @OneToOne par @ManyToOne. Rien ne se passe.
Cela ressemble à un bogue dans votre fournisseur JPA. Le fournisseur JPA que j'utilise (pas Hibernate) crée un '' public variable volatile SingularAttribute identificateurCode; ' –
DN1
@ DN1 lequel utilisez-vous et quelle version? Je voudrais essayer ceci avec votre fournisseur –
DataNucleus JPA. Une option que vous avez est d'utiliser simplement le 'datanucleus-jpa-query.jar' dans votre CLASSPATH pour générer le métamodèle statique et utiliser ces classes générées avec votre fournisseur existant, ou l'utiliser aussi pour la persistance. – DN1