CascadeType.REFRESH는 실제로 무엇을합니까?


81

CascadeType.REFRESH실제로 무엇을 합니까?

그것에 대한 정의는

항목을 새로 고치면이 필드에있는 모든 항목도 새로 고쳐집니다.

그러나 이것은 실제로 무엇을 의미합니까? 누군가 나에게 간단한 예를 들어 줄 수 있습니까?

답변:


117

개별 CascadeType 설명은 약간 혼란 스러울 수 있지만 일반적인 경우에서 쉽게 알아낼 수있는 방법이 있습니다.

모든 CascadeType값에 X대해 EntityManager인터페이스 를 사용하는 인스턴스에서 작업 이 호출 되고 해당 인스턴스에 다른 엔터티 인스턴스에 대한 참조가 있고 해당 연결이 CascadeType.X정의 된 경우 EntityManager작업이 해당 연결된 엔터티에도 적용됨을 의미합니다.

따라서 EntityManager.refresh()다음과 같이 정의됩니다.

데이터베이스에서 인스턴스 상태를 새로 고치고 엔티티에 대한 변경 사항이있는 경우 덮어 씁니다.

엔티티 A가 엔티티 B에 대한 참조를 가지고 있으며, 그 참조가 주석을 붙일 그렇다면 @CascadeType.REFRESH, 및 EntityManager.refresh(A)호출, 다음 EntityManager.refresh(B)암시 적으로도 불린다.


나는 이것이 오래된 게시물이라는 것을 알고 있지만 위의 A와 B의 예를 사용하면 B의 인스턴스가 현재 분리되어 있다면 CascadeType.PERSIST가 B를 영구적으로 만들 수 있습니까? Hibernate의 JPA 구현을 사용하고 있습니다.
Andy

4
내 질문에 대답했습니다. 대답은 아니오입니다. 오브젝트가 지속적이되도록하려면 save를 호출해야합니다.
Andy

지속 상태에있는 객체를 병합하면 어떻게됩니까?
abhijeet pathak

9

새로 고침으로 검색 : 관리되는 개체는 새로 고침 방법을 사용하여 데이터베이스에서 다시로드 할 수 있습니다.

메모리에있는 관리 개체의 내용은 삭제되고 (있는 경우 변경 사항 포함) 데이터베이스에서 검색된 데이터로 대체됩니다. 이는 검색된 이후 다른 EntityManager에 의해 변경되었을 수있는 경우에 대비하여 응용 프로그램이 엔티티 객체의 최신 버전을 처리하도록하는 데 유용 할 수 있습니다.

출처 : http://www.objectdb.com/java/jpa/persistence/retrieve

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.