Hibernate: unmapped association de la classe exception
Je sais que ce doit être un joli élémentaire problème à résoudre, mais 1) je suis relativement nouveau à Hiberner, et 2) les corrections que j'ai trouvé n'est pas (semble) s'appliquent ici.
Ici est l'exception, j'obtiens:
org.mise en veille prolongée.MappingException: Une association à partir de la table de POSTES se réfère à un mappage de classe: com.les haricots.L'utilisateur à org.mise en veille prolongée.cfg.La Configuration.secondPassCompileForeignKeys(de Configuration.java:1285)
Cela se produit lorsque Hibernate tente de configurer lui-même.
Les objets avec lesquelles je travaille sont les Utilisateurs, les Messages (super-classe abstraite), les Statuts et les Commentaires (en béton des sous-classes de la Poste). Chacun est bean à partir de l'une des deux tables: la table des UTILISATEURS et des POSTES. L'Utilisateur des objets sont assez vanille: beaucoup de bland champs décrivant l'utilisateur. En plus de même ennuyeux champs, d'un Statut et d'un Commentaire à la fois ont des propriétaires (l'Utilisateur qui a posté il). Ce qui différencie un État à partir d'un Commentaire est qu'un État peut avoir une liste de Commentaires attaché à elle, mais aucun parent, tandis qu'un Commentaire n'a pas d'enfants posts, mais a un parent (oui, c'est fondamentalement Facebook).
De ce que j'ai lu, le problème semble être dans le plusieurs-à-un les mappages, mais je n'arrive pas à trouver quelque chose de mal. Voici les trois fichiers de configuration que j'utilise.
hibernate.cfg.xml:
<hibernate-configuration> <session-factory> ... <!-- mappé les classes de persistance --> <la cartographie des ressources="User.hbm.xml" /> <la cartographie des ressources="Post.hbm.xml" /> </session-factory> </hibernate-configuration>
User.hbm.xml:
<hibernate-mapping> <class name="com.les haricots.Utilisateur" entity-name="Utilisateur" table="UTILISATEURS" proxy="Utilisateur"> <id name="uid" type="java.lang.Integer"> <la colonne name="uid" /> <generator class="affecté" /> </id> ... </classe> </hibernate-mapping>
Post.hbm.xml:
<hibernate-mapping>
<class name="com.beans.Post" entity-name="Post" table="POSTS" proxy="Post" abstract="true">
<id name="pid" type="java.lang.Integer">
<column name="pid" />
<generator class="assigned" />
</id>
<discriminator column="type" />
<one-to-one name="parent" class="com.beans.Post"></one-to-one>
<many-to-one name="owner" class="com.beans.User" update="false" fetch="select">
<column name="owner" />
</many-to-one>
<property name="postDate" type="java.sql.Timestamp" update="false">
<column name="post_date" />
</property>
<property name="content" type="java.lang.String" update="false">
<column name="content" />
</property>
<property name="type" type="string" update="false">
<column name="type" />
</property>
<subclass name="com.beans.Status" discriminator-value="status">
<list name="children" inverse="false" table="POSTS" lazy="true">
<key column="pid" />
<index />
<one-to-many class="com.beans.Comment" />
</list>
</subclass>
<subclass name="com.beans.Comment" discriminator-value="comment"></subclass>
</class>
</hibernate-mapping>
J'ai l'impression que j'ai besoin de spécifier quelque part le fait que d'un Statut contient une liste de tableaux de Commentaire, mais n'est-ce pas ce que fait implicitement, par le biais de la "liste" construire dans le Post.hbm.xml fichier?
Les fichiers xml existe dans mon classpath (WEB-INF/classes), et de l' .java fichiers eux-mêmes sont visibles à l'application. Idées serait appréciée!
OriginalL'auteur Magsol | 2009-10-14
Vous devez vous connecter pour publier un commentaire.
L'exception que vous avez posté est causée par vous-même explicitement la spécification d'un nom d'entité sur
<class>
de déclaration et de ne pas le préciser sur<many-to-one>
. Nom de l'entité est un attribut spécial utilisé pour distinguer entre les différents mappings basé sur la même classe. Vous n'en avez PAS besoin pour vous de cartographie.Cela dit, il y a plusieurs autres problèmes avec votre cartographie:
<one-to-one>
pour la cartographie des parents est mauvais. Il ne peut pas être un-à-un, par définition, - tandis que ce post n'ont qu'un seul parent, l'autre post peut avoir le même parent (surtout pour les commentaires) ce qui rend les parents à la fin de l'association un-à-plusieurs. Vous devez mapper comme<many-to-one>
à la place.<index/>
déclaration). Carte comme<sac>
à la place.<column>
élément; vous pouvez l'avoir comme attribut au lieu de l'ignorer complètement, si le nom de colonne correspond à un nom de propriété. De même, aucun point en ayant de mise à jour=false partout - si vous ne voulez pas que vos messages de mise à jour, ne les enregistrez pas 🙂Vous êtes la bienvenue et la meilleure des chances avec la veille prolongée. Il s'agit un peu dur au début, mais devient une seconde nature après un certain temps. Et il a fait que vous avez réussi à le faire fonctionner après seulement 3 jours d'suggère que vous n'aurez pas trop de problèmes à l'avenir 🙂
OriginalL'auteur ChssPly76
Pour moi, ce problème a été causé en essayant de faire référence à une propriété plutôt que de la cartographie.
Dans l'syntaxe j'ai fait une (mauvaise!).
Plutôt que du présent (le bon!).
Où AdvertExpiryDays était un int PAS une entité.
OriginalL'auteur CountZero