最近在学ssh,遇到了一些问题,这里我记录两个关于hibernate的问题。is not mapped表示映射出了错,在我写的删除语句:"from Role_right rr where rr.role_id = "+roleId,其中的role_right是数据库的表名,role_id是该表的一个字段名。我的相应配置文件代码是这样的:
<class name="cn.edu.scu.urims.common.entities.RoleRight" table="role_right" catalog="urims">
<id name="roleRightId" type="java.lang.Integer">
<column name="role_right_id" />
<generator class="identity" />
</id>
<many-to-one name="role" class="cn.edu.scu.urims.common.entities.Role" fetch="select">
<column name="role_id" not-null="false" />
</many-to-one>
</class>
当执行删除的时候,就报错说 is not mapped。以前以为from后面直接跟表名,因为老师这么讲的,只是表名的第一个字母要大写,到现在出现错了才明白原因。hibernate查询的是映射的类名,而不是自己的表名,所以会出现映射出错。从这里看,红色字体才是hibernate的类名,因此查询的时候应该写RoleRight,而不是表名role_right。
这样子改了又出现了一个问题:could not resolve property。从字面上理解就是无法辨别的属性,其实和上面那个问题类似,都是在hibernate文件映射的时候出的问题,蓝色字为RoleRight的属性,而不是去查询表中的role_id字段,所以正确的查询语句应该是"from RoleRight rr where rr.role = "+roleId,