Spring Roo и Hibernate: как предотвратить удаление

1

Я использую Spring Roo в качестве рамки и Hibernate как постоянство.

В моем приложении пользователи и роли имеют много-много отношений. Так определяется модель User:

public class User {

/**
 */
@ManyToMany(cascade = CascadeType.ALL)
private Set<Rol> roles = new HashSet<Rol>();

};

От Role к User нет навигации.

Когда пользователь удаляется, здесь возникает запрос на спящий режим:

Hibernate: select user0_.id as id1_5_0_, user0_.password as password2_5_0_, user0_.email as email3_5_0_, user0_.enabled as enabled4_5_0_, user0_.login as login5_5_0_, user0_.name as name6_5_0_, user0_.first_last_name as first7_5_0_, user0_.segundo_last_name as segundo8_5_0_, user0_.version as version9_5_0_ from user user0_ where user0_.id=?
Hibernate: select roles0_.user as user1_5_1_, roles0_.roles as roles2_6_1_, rol1_.id as id1_4_0_, rol1_.name as name2_4_0_, rol1_.version as version3_4_0_ from user_roles roles0_ inner join role rol1_ on roles0_.roles=rol1_.id where roles0_.user=?
Hibernate: delete from user_roles where user=?
Hibernate: delete from role where id=? and version=?

Я получаю исключение, и я считаю, что причиной является последняя строка. Почему он удаляет эту роль? Как я могу это предотвратить?

  • 0
    Cascadetype все отвечает
  • 0
    как мне установить его значение тогда?
Показать ещё 1 комментарий
Теги:
spring
spring-mvc
hibernate
spring-roo

1 ответ

1
Лучший ответ

Просто потеряйте (cascade = CascadeType.ALL).

Указывая cascade = CascadeType.ALL (который включает по определению CascadeType.REMOVE) в отношении roles вы в основном говорите, что вы хотите, чтобы roles были удалены при удалении user, что необязательно.

Все, что вам нужно, это то, что строка из user_roles (строка отношений) будет удалена при удалении пользователя, и это будет выполнено автоматически с помощью спящего режима без указания "CascadeType.REMOVE/ALL"

  • 0
    Круто, это было очень полезно. Теперь я понимаю, для чего cascade . У меня также есть некоторые объекты, которые при удалении я бы хотел удалить и другие связанные объекты. т.е. моя сущность Person имеет много на одну Job но нет никакой навигации от работы к человеку. Можно ли каким-либо образом использовать каскад, чтобы при удалении Job все записи людей с этим заданием также удалялись? Или единственный способ сделать это вручную?
  • 0
    Этот вопрос имеет более одного возможного ответа, поэтому я предлагаю вам поиск / опубликовать его

Ещё вопросы

Сообщество Overcoder
Наверх
Меню