坚持使用Hibernate的用户

时间:2008-11-26 21:36:02

标签: java mysql hibernate

我创建了一个UserObject和RoleObject来表示我的应用程序中的用户。我正在尝试将hibernate用于CRUD而不是原始JDBC。我已成功从数据库中检索信息,但无法创建新用户。我收到以下错误。

org.springframework.web.util.NestedServletException: Request processing failed; nested
exception is org.springframework.dao.DataIntegrityViolationException: could not insert: 
[com.dc.data.UserRole]; nested exception is 
org.hibernate.exception.ConstraintViolationException: could not insert: 
[com.dc.data.UserRole]

我的数据库定义如下:

用户表,授权表和授权表。权限表是用户和权限的连接。

UserObjec的hibernate映射如下:

  ...
  <set name="roles" table="authorities" cascade="save-update"  lazy="false" >
            <key column="userId" />
            <one-to-many class="com.dc.data.UserRole"/>
            <many-to-many  class="com.dc.data.UserRole" column="authId" />
        </set>
    </class>
   ...

UserRole映射如下:

<class name="com.dc.data.UserRole" table="authority">
    <id name="id" column="authId">
        <generator class="native" />
    </id>
    <property name="roleName">
        <column name="authority" length="60" not-null="true" />
    </property>
</class>

如何更改映射或对象结构以便能够保留新用户?

2 个答案:

答案 0 :(得分:2)

您在“set”元素中定义了两种不同的关系。您可能想要的只是多对多元素。

如果仍然无效,请尝试保存UserRole本身以查看是否可以自行保留。如果可以,那么在尝试持久化User时会抛出ConstraintViolationException。

最后提示,您可能不希望在“角色”集上级联保存/更新。您的UserRoles很可能已经在数据库中,并且只是在创建用户时附加到用户。

答案 1 :(得分:0)

用户角色的约束违规可能是尝试插入带有重复键的行的原因。也许尝试使用其他类型的生成器,例如“序列”。