【发布时间】:2013-01-29 09:22:50
【问题描述】:
我有域类 - 用户、角色、组、组角色
用户域
private long id,
private String userName,
private String password,
Set<Role> roles = new HashSet<Role>();
User.hbm.xml
<hibernate-mapping package="uk.co.jmr.sdp.domain">
<class name="User" table="user">
<id name="id" unsaved-value="-1">
<generator class="native"/>
</id>
<property name="userName" column="user_name"/>
<property name="password" column="password"/>
<property name="emailId" column="email_id"/>
<set name="roles" table="user_role" lazy="false" cascade="all">
<key column="user_id"/>
<many-to-many column="role_id" class="Role" fetch="join"/>
</set>
<set name="groupRoles" table="user_grouprole" lazy="false" cascade="all">
<key column="user_id"/>
<many-to-many column="group_role_id" class="GroupRole" fetch="join"/>
</set>
</class>
</hibernate-mapping>
我有 user_grouprole 表作为用户和组角色集的连接表 我有 user_role 表作为用户和角色集的连接表
组域
private long id;
private String groupName;
private Set<Role> roles = new HashSet<Role>();
Group.hbm.xml
<hibernate-mapping package="uk.co.jmr.sdp.domain">
<class name="Group" table="group">
<id name="id" unsaved-value="-1">
<generator class="native"/>
</id>
<property name="groupName" column="group_name"></property>
<set name="roles" table="group_role" lazy="false" cascade="all">
<key column="group_id"/>
<many-to-many column="role_id" class="Role" fetch="join"/>
</set>
组角色
private long id;
private Role role;
private Group group;
GroupRole.hbm.xml
<class name="GroupRole" table="group_role">
<id name="id" unsaved-value="-1">
<generator class="native"/>
</id>
<many-to-one name="role" class="uk.co.jmr.sdp.domain.Role"
column="role_id" lazy="false" not-null="true" />
<many-to-one name="group" class="uk.co.jmr.sdp.domain.Group"
column="group_id" lazy="false" not-null="true" />
</class>
</hibernate-mapping>
当我尝试使用主类进行测试时,我收到一个映射错误,例如休眠映射错误,例如 外键 (FK5110401A8398947:user_grouprole [group_role_id])) 的列数必须与引用的主键 (group_role [group_id,role_id]) 的列数相同
这是什么错误?为什么我会收到此错误?我应该怎么做才能纠正这个错误???任何解决方案?谁能解释一下这个错误是什么?
提前致谢
【问题讨论】:
-
你能解释一下'GroupRole'类的作用吗?从域定义看来,它不过是一个连接表……那你为什么要为它定义一个类呢?
-
GroupRole 类包含组和角色对象。此 grouprole 对象必须与 User 映射。用户有很多 groupRoles。
标签: java spring hibernate hibernate-mapping