Постоянные пользователи, использующие Hibernate - PullRequest
0 голосов
/ 27 ноября 2008

Я создал 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 выглядит следующим образом:

  ...
  <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 ]

2 голосов
/ 29 ноября 2008

Вы определяете два разных отношения внутри вашего элемента "set". То, что вы, вероятно, хотите, это просто элемент «многие ко многим».

Если это все еще не работает, попробуйте сохранить саму пользовательскую роль, чтобы посмотреть, сможете ли вы сохранить ее самостоятельно. Если вы можете, то ConstraintViolationException выбрасывается при попытке сохранить пользователя.

Последний совет, вы, вероятно, не хотите каскадно сохранять / обновлять набор «ролей». По всей вероятности, ваши пользовательские роли уже будут в БД и будут просто присоединяться к пользователям по мере их создания.

0 голосов
/ 27 ноября 2008

Нарушение контраргумента на UserRole может быть причиной попытки вставить строку с дублирующим ключом. Возможно поэкспериментируйте с использованием других типов генераторов, таких как «последовательность».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...