REFRESH 및 MERGE는 데이터베이스 측면에서 무엇을 의미합니까?


94

궁금해서이 답변을 빨리 찾아야합니다. Google은별로 도움이되지 않습니다.

Java Persistence API에는 프레임 워크가 연관된 엔티티에 대한 작업을 계단식으로 작성하도록 지시하는 다음 속성이 있습니다.

CascadeType.PERSIST
CascadeType.DELETE
CascadeType.MERGE
CascadeType.REFRESH

처음 두 가지가 무엇을 의미하는지 압니다. B가있는 객체 A를 유지하면 B도 유지되고 A를 삭제하면 B도 삭제됩니다.

그러나 나는 다른 두 사람이 무엇을 성취하는지 이해할 수 없습니다. 도움?

답변:


80

REFRESH는 "데이터베이스의 상태 변경 사항을 내 표현으로 가져 오기"를 의미합니다. 계단식 연결은 간단합니다. 이는 모든 연관된 엔티티가 새로 고쳐 짐을 의미합니다.

MERGE는 "저장"에 가까운 복잡한 것을 의미하지만 "이 분리 된 엔티티를 관리 상태로 되돌리고 상태 변경 사항을 저장"하는 것과 비슷합니다. 계단식이란 모든 관련 엔터티가 동일한 방식으로 푸시되고 다시 가져온 관리 엔터티 핸들에 .merge()연결된 모든 관리 엔터티가 있음을 의미합니다.

관련 문서의 한 인스턴스에 링크


1
기본값은 무엇이며 (CascadeType을 설정하지 않은 경우) 설정하는 데 가장 합리적이고 일반적인 것은 무엇입니까?
Rosdi Kasim

@Rosdi Kasim : CascadeType기본값은 빈 배열입니다.
user1438038

@chaos so refresh는 부모가 업데이트 / 새로 고침 될 때 데이터베이스에있는 내용과 일치하도록 자식을 업데이트합니다. 병합은 기본적으로 데이터베이스의 하위 항목에서 업데이트 된 필드를 덮어 써 상위 항목이있는 하위 항목을 반영합니다. 둘 다 사용하면 어떻게됩니까? 나는 이것을 오해했다고 생각합니다.
Jordan Mackie

87

다 대다 관계에 대한 JPA 주석 의미 :

  • ALL-소스 엔터티에서 수행되는 가능한 모든 계단식 작업이 연결 대상에 계단식으로 연결됩니다.
  • MERGE-소스 엔터티가 병합 된 경우 병합은 연결 대상에 계단식으로 연결됩니다.
  • PERSIST-소스 엔티티가 지속되는 경우 지속은 연관 대상에 계단식으로 연결됩니다.
  • REFRESH-소스 엔터티가 새로 고쳐지면 새로 고침이 연결 대상에 계단식으로 적용됩니다.
  • REMOVE-소스 엔티티가 제거되면 연관 대상도 제거됩니다.

나는 그것들을 이렇게 봅니다 (더 읽기 쉽습니다).

  • MERGE-기존 개체의 경우 테이블의 기존 데이터를 내 개체의 데이터와 병합 합니다. (데이터베이스에 동기화)
  • PERSIST-데이터베이스의 개체에서 새 레코드를 만듭니다.
  • REFRESH-개체의 데이터를 새로 고칩니다. 동기화해야하는 데이터베이스가 변경되었을 수 있습니다. (데이터베이스에서 동기화)
  • REMOVE-음, 삭제입니다.

1
주석에 대한 Javadoc은 나를 위해 아무것도 정리하지 못했습니다. 답변 해주셔서 감사합니다!
André Chalella
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.