JPA 2.0, 최대 절전 모드 및 "orphanRemoval"에 관한 질문이 있습니다.JPA 2.0/Hibernate와 "orphanRemoval": 엔티티 만 바꾸면 이전 엔티티가 제거되지 않습니다
먼저 내 설정 :
- 봄 3.0.5.RELEASE
- SprnigData JPA 1.0.1.RELEASE
- 최대 절전 모드 3.5.2-최종
- DBMS : PostgreSQL의 9.0
"User"와 "AvatarImage"라는 두 개의 간단한 엔티티 클래스가 있으며 "User"에는 "AvatarImage"가 있으며 "User"와 "AvatarImage"에는 relat가 있습니다. 이온. 클래스 "사용자"에서
이 호텔은 다음과 같습니다은 "avatarImage"속성이 null로 설정됩니다 경우// class "User"
@OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY, orphanRemoval = true)
private AvatarImage avatarImage;
그래서 의미, "사용자"와 "AvatarImage"사이의 참조입니다 "orphanRemoval"메카니즘은 데이터베이스에서 "avatarImage"를 지울 것입니다 (제가 틀렸다면 저를 교정하십시오). 다음 따라서 "사용자"를 저장, null로 먼저 "avatarImage"속성을 설정
user.setAvatarImage(null); // First set it to null
userRepository.save(user); // Now "orphanRemoval" will delete the old one
user.setAvatarImage(theNewAvatarImage);
userRepository.save(user);
및 :
그래서 특정 사용자에 대한 "avatarImage"을 업데이트 할 때, 나는 현재이를 작성해야 새 AvatarImage를 "NewAvatarImage"로 설정하고 사용자를 다시 저장하십시오.
"orphanRemoval"은 이전 "avatarImage"를 "null"로 설정하고 사용자를 저장하면 삭제됩니다.
하지만,이 코드도 일을해야한다고 생각했을 것이다 :
그래서 나는 "avatarImage"를 설정하지 않으면됩니다user.setAvatarImage(theNewAvatarImage);
userRepository.save(user);
에 "널"하지만 바로 이전 "avatarImage 교체", "theNewAvatarImage"로 설정. 하지만이 방법은 작동하지 않습니다. 이전 AvatarImage는 트랜잭션 커밋시 데이터베이스에서 제거되지 않습니다.
아는 사람, 왜 두 번째 코드가 (이전에 "null"로 설정하지 않고 AvatarImage를 대체하는 것) 작동하지 않습니다?
정말 감사드립니다.
고마워요.