2013-07-16 5 views
1

я следующий код, где эм является EntityManager:Когда следует использовать метод отсоединения EntityManger?

Query query = em.createQuery("SELECT e FROM TODO e "); 
ret = (TODO) query.getSingleResult(); 
em.detach(ret); 
return ret; 

После того, как я вернусь в отставке из этого метода (и оставить класс) не менеджер объект отделяться в любом случае? Зачем мне когда-либо использовать метод отсоединения?

+0

Он будет отсоединен, когда сессия будет закрыта. Вы хотели бы отсоединить объект, например, если вы хотите его изменить без изменения изменений в базе данных. –

+1

Другой причиной может быть передача объекта в другой поток. –

ответ

2

Я отделяю объект до передачи его пользовательскому методу (возможно, метод обратного вызова), когда ожидается, что метод обратного вызова сможет получить доступ (читать), но не повлияет/не изменит объект в течение моя сделка.

0

Объекты автоматически отсоединяются, когда транзакция завершается. Иногда вы хотите отделить объект раньше, потому что хотите внести изменения в объект, который вы не хотите сохранять автоматически.