Mag*_*sol 8 hibernate exception hibernate-mapping mappingexception
我知道这应该是一个非常基本的问题需要修复,但1)我对Hibernate相对较新,2)我发现的修复程序(似乎)不适用于此处.
以下是我得到的例外情况:
org.hibernate.MappingException: An association from the table POSTS refers to an unmapped class: com.beans.User at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1285)
当Hibernate尝试自行配置时会发生这种情况.
我正在使用的对象是用户,帖子(抽象超类),状态和注释(Post的具体子类).每个都是来自两个表之一的bean:USERS和POSTS.用户对象很漂亮:许多描述用户的平淡字段.除了类似的无聊字段,状态和评论都有所有者(发布它的用户).状态与注释的区别在于,状态可以附加一个注释列表但没有父项,而注释没有子项,但有一个父项(是的,这基本上是Facebook).
从我所读到的,问题似乎是多对一的映射,但我似乎无法找到任何错误.这是我正在使用的三个配置文件.
hibernate.cfg.xml中:
<hibernate-configuration>
<session-factory>
...
<!-- mapped persistence classes -->
<mapping resource="User.hbm.xml" />
<mapping resource="Post.hbm.xml" />
</session-factory>
</hibernate-configuration>
User.hbm.xml:
<hibernate-mapping>
<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>
Run Code Online (Sandbox Code Playgroud)
我觉得我需要在某处指定一个Status包含Comment的ArrayList这一事实,但是不是通过Post.hbm.xml文件中的"list"构造隐式完成的吗?
xml文件存在于我的类路径(WEB-INF/classes)中,并且.java文件本身也对应用程序可见.我将不胜感激!
Chs*_*y76 17
您发布的异常是由您在<class>声明中明确指定实体名称而未在其上指定实例名称引起的<many-to-one>.实体名称是一个特殊属性,用于区分基于同一类的不同映射.你不需要它来映射.
也就是说,您的映射存在多个其他问题:
<one-to-one>父映射是错误的.根据定义,它不能一对一 - 虽然这篇文章只有一个父母,但另一个帖子可能有同一个父母(特别是评论),这使父母的结社一对多结束.您需要将其映射为<many-to-one>相反.<index/>声明).<bag>相反,将其映射.<column>元素; 您可以将其作为属性,或者如果列名称与属性名称匹配则完全跳过它.同样,没有任何意义在任何地方都有update = false - 如果你不希望你的帖子更新,请不要保存它们:-)| 归档时间: |
|
| 查看次数: |
34504 次 |
| 最近记录: |