我知道这应该是一个需要解决的非常基本的问题,但是 1)我对 Hibernate 比较陌生,2)我发现的修复(似乎)不适用于这里。
这是我得到的例外:
org.hibernate.MappingException:来自表 POSTS 的关联引用 一个未映射的类:com.beans.User at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1285)
当 Hibernate 尝试配置自身时会发生这种情况。
我正在使用的对象是用户、帖子(抽象超类)、状态和评论(帖子的具体子类)。每个都是来自两个表之一的 bean:USERS 和 POSTS。User 对象非常普通:许多描述用户的平淡无奇的字段。除了类似无聊的字段之外,状态和评论都有所有者(发布它的用户)。状态与评论的区别在于,状态可以附有评论列表但没有父级,而评论没有子帖子,但有父级(是的,这基本上是 Facebook)。
从我读过的内容来看,问题似乎出在多对一映射中,但我似乎找不到任何问题。这是我正在使用的三个配置文件。
休眠.cfg.xml:
<休眠配置> <会话工厂> ... <!-- 映射的持久性类 --> <映射资源="User.hbm.xml" /> <映射资源="Post.hbm.xml" /> </会话工厂> </hibernate-configuration>
用户.hbm.xml:
<休眠映射> <class name="com.beans.User" entity-name="User" table="USERS" proxy="User"> <id name="uid" type="java.lang.Integer"> <column name="uid" /> <generator class="assigned" /> </id> ... </class> </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>
我觉得我需要在某处指定一个状态包含评论的 ArrayList 的事实,但这不是通过 Post.hbm.xml 文件中的“列表”结构隐式完成的吗?
xml 文件存在于我的类路径(WEB-INF/classes)中,并且 .java 文件本身对应用程序也是可见的。见解将不胜感激!