Überwintern: nicht zugeordnete Klasse Verein Ausnahme
Ich weiß, das sollte ein ziemlich elementares Problem zu beheben, aber 1) ich bin relativ neu in den Ruhezustand, und 2) die fixes, die ich gefunden habe nicht (scheinen) hier gelten.
Hier ist die exception die ich erhalte:
org.hibernate.MappingException: Ein Verein aus der Tabelle POSTS bezieht sich auf eine nicht zugeordnete Klasse: com.Bohnen.Benutzer an org.hibernate.cfg.- Konfiguration.secondPassCompileForeignKeys(Configuration.java:1285)
Dieser tritt auf, wenn Hibernate versucht selbst zu konfigurieren.
Objekte arbeite ich mit dem user, Beiträge (abstrakte Oberklasse), Status und Kommentare (konkrete Unterklassen der Post). Jedes bean aus einer von zwei Tabellen: BENUTZER und BEITRÄGE. Die Benutzerobjekte sind ziemlich Vanille: viel bland Felder zur Beschreibung der Benutzer. Zusätzlich zu den ebenso langweiligen Felder, ein Status und ein Kommentar haben beide Besitzer (Benutzer, der es gepostet hat). Was unterscheidet einen Status aus ein Kommentar ist, dass ein Status können Sie eine Liste der Kommentare, die zu ihm angebracht, aber kein Elternteil, während ein Kommentar hat keine Kinder Beiträge, aber ein Elternteil hat (ja, das ist im Grunde Facebook).
Von dem, was ich gelesen habe, scheint das problem zu sein, in der viele-zu-eins-Zuordnungen, aber ich kann nicht scheinen zu finden, alles falsch. Hier sind die drei Dateien, die ich verwende.
hibernate.cfg.xml:
<hibernate-configuration - > <session-factory> ... <!-- abgebildet Persistenz-Klassen --> <mapping resource="User.hbm.xml" /> <mapping resource="Post.hbm.xml" /> </session-factory> </hibernate-configuration - >
User.hbm.xml:
<hibernate-mapping> <class name="com.Bohnen.User" entity-name="User" table="USERS" proxy="User"> <id name="uid" type="java.lang.Integer"> <column name="uid" /> <generator class="assigned" /> </id> ... </Klasse> </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>
Habe ich das Gefühl ich muss irgendwo angeben, die Tatsache, dass ein Status enthält eine ArrayList Kommentar, aber ist das nicht geschieht implizit durch die "list" - Konstrukt in die Post.hbm.xml Datei?
Den xml-Dateien existieren in meinem classpath WEB-INF/classes), und die .java-Dateien selbst werden sichtbar an der Anwendung. Erkenntnisse wäre dankbar!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausnahme du gepostet hast wird verursacht, indem man sich ausdrücklich Angabe eines entity-name auf
<class>
Erklärung und nicht die Angabe auf<many-to-one>
. Name der Entität ist ein spezielles Attribut verwendet für die Unterscheidung zwischen verschiedenen mappings auf der Grundlage der gleichen Klasse. Sie brauchen es NICHT für Sie-mapping.Dieser sagte, gibt es mehrere zusätzliche Probleme, die mit Ihrem mapping:
<one-to-one>
mapping für Eltern ist falsch. Man kann es nicht eins-zu-eins-per definition - während diese post wird nur einem Elternteil, einem anderen Beitrag haben können und die gleichen Eltern (vor allem für die Kommentare), die macht der Eltern Ende der Assoziation eins-zu-viele. Sie müssen, um eine Karte zu als<many-to-one>
statt.<index/>
Erklärung). Ordnen Sie Sie als<Tasche>
statt.<column>
element, man kann es als Attribut oder ganz übersprungen werden, wenn die Spalte name entspricht der Eigenschaft name. Ebenso keinen Sinn, mit update=false überall - wenn Sie nicht möchten, dass Ihre posts aktualisiert werden, nicht speichern 🙂Für mich dieses Problem wurde verursacht, indem Sie versuchen, um eine Eigenschaft zu verweisen, anstatt das mapping.
In fluent-syntax, die ich war, dies zu tun (falsch!).
Eher als das (richtige!).
Wo AdvertExpiryDays war ein int NICHT in ein Unternehmen.