これはかなり初歩的な問題であることはわかっていますが、1) 私は Hibernate に比較的慣れていないため、2) 私が見つけた修正はここには適用されません (適用されるようです)。
これが私が得ている例外です:
org.hibernate.MappingException: テーブル POSTS からの関連付けが参照しています マップされていないクラス: com.beans.User at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1285)
これは、Hibernate が自身を構成しようとしたときに発生します。
私が扱っているオブジェクトは、Users、Posts (抽象的なスーパークラス)、Statuses、および Comments (Post の具体的なサブクラス) です。それぞれは、2 つのテーブル (USERS と POSTS) のいずれかの Bean です。User オブジェクトは非常に平凡です: ユーザーを説明する当たり障りのないフィールドがたくさんあります。同様に退屈なフィールドに加えて、ステータスとコメントの両方に所有者 (投稿したユーザー) がいます。ステータスとコメントの違いは、ステータスにはコメントのリストを添付できますが、親はありませんが、コメントには子の投稿はありませんが、親はあります (はい、これは基本的に Facebook です)。
私が読んだことから、問題は多対一のマッピングにあるようですが、何か問題があるようには見えません。ここに私が使用している3つの構成ファイルがあります。
hibernate.cfg.xml:
<休止状態の構成> <セッションファクトリー> ... <!-- マッピングされた持続性クラス --> <mapping resource="User.hbm.xml" /> <mapping resource="Post.hbm.xml" /> </セッションファクトリー> </休止状態の構成>
User.hbm.xml:
<休止状態のマッピング> <class name="com.beans.User" entity-name="User" table="USERS" proxy="User"> <id name="uid" type="java.lang.Integer"> <列名="uid" /> <generator class="assigned" /> </id> ... </クラス> </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>
Status に Comment の ArrayList が含まれているという事実をどこかに指定する必要があるような気がしますが、それは Post.hbm.xml ファイルの「リスト」構造によって暗黙的に行われているのではないでしょうか?
xml ファイルはクラスパス (WEB-INF/classes) に存在し、.java ファイル自体もアプリケーションに表示されます。洞察をいただければ幸いです。