나는 영속 객체의 단일 인스턴스에 업데이트를 동기화하기위한 아이디어를 찾고 있습니다.속성 업데이트를 단일 도메인 인스턴스와 동기화하는 방법은 무엇입니까?
간단한 도메인 개체 :
public class Employee {
long id;
String phone;
String address;
}
가정하자 두 UI 인스턴스 직원 풀업 (1) 여기서, 식 (1). 첫 번째 클라이언트는 Employee (1)의 phone 속성을 편집합니다. 두 번째 클라이언트는 Employee (1)의 주소 특성을 편집합니다. 그들이 변경 사항을 제출할 때 둘 다 유지되어야합니다.
가능한 솔루션은 각 속성에 대한 업데이트 기능을 작성하는 것입니다 :
public void updatePhone(Employee employee) {
// right now I am synchronizing _employeeUpdateLock
// synchronize instance of Employee won't work
synchronized(something) {
// update phone
}
}
// a similar function for address
이 접근 불행하게도 확장 성이 좋지 않습니다. API는 속성과 계속해서 일치해야합니다. 원본 객체의 복사본을 업데이트 함수 내에서 뽑아되지 않는 한 함수가, 클라이언트가 변경하고자하는 속성을 알 수 없기 때문에
public void update(Employee employee) { ... }
이 작동하지 않습니다.
Hibernate는 행을 데이터베이스에 잠그는 메커니즘을 제공합니다. 이것은 잘 확장되지 않습니다.
아마도 해결책은 행이 수정 될 것으로 예상되는 빈도에 따라 달라집니다. 저주파 수정을 위해서는 동기화 및 잠금이 좋습니다. 빈도가 높은 수정의 경우 검색시 행의 복사본을 사용하여 업데이트 된 속성을 파악할 수 있습니다.
이 문제를 해결하기위한 더 나은 패러다임을 찾고 싶습니다. 감사.
개체의 인스턴스 하나가 아니라 데이터베이스에 하나의 행을 공유합니다. –
좋아요, 나는 결론을 내리기 전에 전체 게시물을 읽는 습관을 택해야합니다. ;-) 문제는 기본적으로 낙관적 인 대 비관적 인 동시성의 문제처럼 들립니다. Hibernate 문서는 Hibernate가 지원하는 접근법과 함께 다음과 같이 잘 요약되어있다. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html#transactions-optimistic – chris