обработка исключений постоянства - PullRequest
1 голос
/ 15 июня 2011

У меня небольшая проблема с перехватом исключений.У меня есть такой код:

Role r=new Role("default");
r.setId(Role.DEFAULT_ID);
u.getRoles().add(r); // u is instance of entity which is in relation manytomany with r
try{
   em.persist(u);
}catch(Exception e){
   System.out.println(e.getClass().getName()+" - default role not found, creating...");
   em.persist(r);
   em.persist(u);
}

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

Журнал ошибок первых двух выданных исключений:

[org.hibernate.util.JDBCExceptionReporter] (http-127.0.0.1-8080-5) could not insert collection: [Comic.model.User.roles#5] [insert into USER_ACCOUNT_ROLE (USER_ACCOUNT_uid, roles_rid) values (?, ?)]
java.sql.SQLIntegrityConstraintViolationException: ...blabla you dont follow constraints

.

ERROR [org.hibernate.event.def.AbstractFlushingEventListener] (http-127.0.0.1-8080-5) Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: could not insert collection: [Comic.model.User.roles#5]

Я не могупоймать любое исключение, поскольку оно выбрасывается за пределы моего блока try, верно?Любые предложения, что я мог сделать по этому поводу?

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

Я думаю, что для вашей сущности пользователя ваши отношения с ролью могут быть / должны быть ManyToMany.

Вам не нужно вручную управлять сохранением графа объектов, как вы это делаете в блоке catch, если вы также поместите CascadeType.PERSIST в это отношение.

1 голос
/ 15 июня 2011

Если em.persist () выдает и Exception.Тогда кажется странным, что вы вызываете метод снова (дважды) в своем операторе catch.

Либо вам нужно добавить еще один try catch, внутри вашего оператора catch для обработки второго исключения.* Или вам нужно изменить логику, чтобы проверить необходимость сохранения роли в первую очередь, а не обрабатывать ее с помощью исключения.

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