jpa erreur utilise une non-entité [classe ch.printsoft.mailhouse.usermgr.de l'entité.Département] comme entité cible dans la relation de l'attribut
J'ai essayer de persister mon Department
et Mandator
classes de hsqhldb mais il donne à cette erreur.
Exception Description: [class ch.printsoft.mailhouse.usermgr.entity.Mandator] uses a non-entity [class ch.printsoft.mailhouse.usermgr.entity.Department] as target entity in the relationship attribute [field departments].
at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:115)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
Ce sont les classes que j'ai essayer de persister à ma base de données. Je ne sais vraiment pas quel est le problème.
@Entity
public class Mandator {
@Id
@GeneratedValue
private Integer id;
private String mandatorId;
@OneToMany(mappedBy = "mandator")
private List<MandatorUser> mandatorUsers;
@OneToMany(mappedBy = "mandator")
private List<SLAFamilyGroup> slaFamilyGroups;
@OneToMany(mappedBy = "mandator")
private List<Group> groups;
@OneToMany(mappedBy = "mandator")
private List<Department> departments;
@OneToMany(mappedBy = "mandator")
private List<CostUnit> costUnits;
@Entity
public class Department {
@Id
@GeneratedValue
private Integer id;
private String name;
private String responsiblePerson;
private String location;
@ManyToOne(optional = false)
private Mandator mandator;
@ManyToMany
private List<DocumentUser> documentUsers;
J'ai vraiment essayé de chaque chose, mais il ne fonctionne pas.
OriginalL'auteur Miguel Iglesias | 2011-12-02
Vous devez vous connecter pour publier un commentaire.
Vous assurer que vous avez les deux catégories qui figurent dans votre persistence.xml et les deux classes sont sur le chemin de la classe.
Veuillez inclure votre persistence.xml.
OriginalL'auteur James
J'ai passé beaucoup de temps à mettre au point un apparemment inexplicable cas de cette exception, donc, je suis juste de quitter mon histoire ici.
Si vous utilisez un peu ancien de la mise en œuvre de la JPA (par exemple, EclipseLink 2.5.x) et que vous utilisez moderne Java 8 fonctions (comme les expressions lambda) dans votre base de code - ne pas jamais les utiliser dans la JPA, les classes d'entité.
EclipseLink 2.5 la classe de métadonnées de l'analyseur se bloque lors de la rencontre de Java 8 fonctions (comme les expressions lambda, la méthode des références, etc.) dans le bytecode. L'interne crash est un très hostile
ArrayIndexOutOfBoundsException
, mais vous n'avez même pas à le voir, comme le tisserand code ignore silencieusement métadonnées de l'analyseur se bloque et juste suppose que la classe n'a pas intéressant de métadonnées. Ce qui le mène à croire que la classe en question n'est pas une entité, même si elle a toutes les annotations, et le résultat final est le message d'erreur dont nous parlons.Ligne du bas: Ne pas utiliser Java 8 lambdas dans les classes d'entité JPA. JAMAIS.
Mais EclipseLink 2.6.4 a résolu ce problème et maintenant JPA fonctionne très bien avec les lambdas!! Au moins les choses que j'ai testé 😉
Grâce kFYatek ! dans mon cas, une Entité a été tout simplement ignorés, sans Avertir de JPA (in FINE journal !!) et puis sur un @OneToMany pointant sur ce ignoré Entité JPA lever une Exception "Une entité utilise une non-entité B (ignoré) ... comment perdu 1 heure dans un nuage sombre ....... :p une petite expression lambda a été perdu dans mon Entité B 🙂 Après le remplacement, tout est ok!
merci !!! elle fonctionne..... 😀
Viens de tomber sur le même problème - merci pour cette réponse. Upvoting.
OriginalL'auteur kFYatek
J'espère que cela peut aider quelqu'un.
J'ai eu le même problème.
La nuit d'avant, tout était ok.
Dans NetBeans, j'ai vérifié, à l'aide de l'Histoire, tous les fichiers impliqués dans l'erreur.
Persistence.xml inclus.
Rien n'a été changé.
J'ai vérifié manuellement.
J'ai essayé toutes les solutions proposées dans ce fil même de migrer vers eclipselink 2.6.4.
J'ai supprimé les 2 classe impliquée dans le persistence.xml sauvegardé, et de l'ajouter à nouveau.
L'erreur est toujours là.
Ensuite, j'ai supprimé TOUS les classess dans la liste des Classes d'Entité incluse dans le persistence.xml et puis j'ai inclus de nouveau.
Maintenant ça fonctionne.
Comme par magie.
Mais vraiment il y avait de la non différence dans l'histoire.
Même un simple caractère.
OriginalL'auteur docHell
Supprimer mappedBy de @OneToMany annotations de Mandant classe
Vérifier si toutes les classes associées sont mappés sur @Entity. Département de classe a @ManyToMany rapport à DocumentUser. Fournir la liste des DocumentUser classe
Description de l'Exception: [classe ch.printsoft.mailhouse.usermgr.de l'entité.Mandant] utilise une non-entité [classe ch.printsoft.mailhouse.usermgr.de l'entité.Département] comme entité cible dans la relation de l'attribut [champ ministères].
Le Ministère de la classe supprimer "option = false" de @ManyToOne annotation sur mandant
j'ai eu le sam e exception
Pourriez-vous mettre à jour la classe des listes dans la question avec la modification des annotations et de fournir toute la classe des listes? De l'exception, il semble que le gestionnaire d'entité "pense" qu'il n'existe aucune entité du Département.
OriginalL'auteur WeMakeSoftware
Assurez-vous que la "classe" des fichiers sont dans le même pot.
Assurez-vous que vous n'avez pas deux .les fichiers de classe avec le même nom !
OriginalL'auteur Marcin Cinik
Vous assurer d'avoir les deux classes a la propriété de PK et de l'absence de paramètre du constructeur.
- Je ajouter le code suivant dans ma classe d'entité.
OriginalL'auteur peirong.an
Examiner votre
mappedBy=xxx
et assurez-vous quexxx
est unique dans l'ensemble du projet.OriginalL'auteur WesternGun