2011-12-07 3 views
2

내가 엔티티를했습니다 말할 수 있습니다어떻게 읽기 전용으로 사용하여 검색 한 후 하이버 네이트 엔티티가 읽기 전용 인 경우 또는하지

Session session = (Session)entityManager.getDelegate(); 
session.setReadOnly(entity, makeReadOnly); 

내가이 개체 여부를 테스트 할 수 있도록하고 싶습니다 그리고 그 게으른로드 된 자식 실제로 프로그래밍 방식으로 읽기 전용 있지만이를 수행 할 수있는 API를 참조하십시오. 그런 API가 존재합니까?

업데이트 : 최대 절전 모드가 3.3.1

+0

그냥 호기심,이 단위 테스트 또는 당신은 라이브 코드이를 원하십니까? 왜 당신은 그것을 필요로합니까? – aishwarya

+0

@aishwarya, 부모가 읽기 전용으로 설정된 경우 지연로드 된 엔티티가 작동하는 방식을 확인하고 싶습니다. 부모 엔티티를 읽기 전용으로 설정하기 전에 자식 엔티티가 이미로드 된 경우 (느슨하게 또는 지연되지 않은 경우) 하위 엔티티가 어떻게 작동하는지보고 싶습니다. 기본적으로 일부 코드를 통해 디버깅하는 동안에 만 필요합니다. –

답변

2

그것에 대해 Session.isReadOnly(Object entityOrProxy) 있습니다 사용하고 있습니다.

편집 : 3.3.1에 대한 미운 해킹 :

//usual imports 
//.... 
import org.hibernate.impl.SessionImpl; 
import org.hibernate.engine.EntityEntry; 
import org.hibernate.engine.Status; 
import org.hibernate.engine.StatefulPersistenceContext; 


Session session = (Session)entityManager.getDelegate(); 

SessionImpl sessImpl = (SessionImpl) session; 
if (((StatefulPersistenceContext) sessImpl.getPersistenceContext()).getEntry(entity).getStatus() == Status.READ_ONLY) { 
    dosomething 
}; 
+0

Ahh .. 3.5에 있지만 3.3.1에는 없지만 3.5 구현의 코드를보고 사용할 수 있습니다. 고마워 .. –

+0

@ChrisWilliams 아, 알았어 3.3.1이야. 내 답변을 편집, 비록 추한 캐스팅을 많이 포함합니다. – soulcheck

+0

내가 수락하면 다시 확인 했어야 했어! 방금 3.3.1에 대한 해결책을 게시하기 위해 돌아 왔고 당신은 그것에 나를 때렸다. 감사! –

관련 문제