2012-01-18 3 views
4

Я использую JPA 2 с Hibernate 3.6.8 в качестве реализации.JPA/Hibernate - отсоединение сущности вместе с детьми

Допустим, у нас есть объект Foo

@Entity 
public class Foo { 
    .... 
    @OneToOne 
    private Bar bar; 

    .... 
} 

мне нужно отделить весь сущности график из сессии, и когда я entityManager.detach(foo), я был удивлен, что bar оставались присоединенными, что ИМО вполне противоречит интуитивным ,

Чтение документации на EntityManager, оказывается, что это ожидаемый случай, так как он ничего не знаю о ассоциациях/детских entites не упоминает:

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

Я могу просто позвонить entityManager.detach(foo.getBar()) тоже, но это означает, что если добавить любые ассоциации позже, я должен убедиться, что те, оторваны вручную тоже.

Есть ли удобный способ достичь этого, не прибегая к отражению?

ответ

7

Добавить каскад типа Detach:

@OneToOne(cascade = CascadeType.DETACH) 
private Bar bar; 
+0

Конечно ... Beautiful :). Спасибо JB. – Asa