2013-10-01 5 views
0

Мы используем Grails и Hibernate. Мы получаем org.hibernate.StaleObjectStateException в наших журналах. Я вижу, что это может произойти из-за оптимистического сбоя блокировки. Хорошо. Тем не менее, я хочу, чтобы это никогда не происходило из нескольких обновлений из одного потока. Я имею в виду никогда. Есть ли какой-либо угловой случай, когда есть несколько обновлений для одного и того же объекта спящего режима, но все из того же потока, который может вызвать это исключение?Можно ли исключить StaleStateObjectException из одного потока?

Спасибо,

ответ

1

Я не пробовал, но я ожидал бы эту ошибку из этого кода:

Foo foo1 = session.get(Foo.class, 1); 
Foo foo2 = session.get(Foo.class, 1); // same ID 

foo1.setBar(1); 
foo2.setBar(2); 

session.saveOrUpdate(foo1); 
session.saveOrUpdate(foo2); // Should throw an error 

Это может произойти, например, если у вас есть сложные вспомогательные объекты, которые работают на том же юридические лица.

+0

Я думал, что Hibernate гарантировал, что, когда вы «получите» один и тот же идентификатор более одного раза с того же сеанса, вы получите тот же ('==') объект обратно? –

+0

@Aoron Digulla, как вы получаете сессию спящего режима в граале? –

+0

@IanRoberts: Должно, но я не уверен, что это зависит и насколько это умно. –

Смежные вопросы