하이버네이트, 데이터 변경 이력 남기기
입력/수정/삭제에 대해 히스토리을 남기고 싶다.
- 속성, 이전값, 변경값
https://docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/Interceptor.html
간단히 EmptyInterceptor를 오버라이드해서 쓰면 된다.
[설정, hibernate 4.2는 이렇고 3.x는 설정이 다르다. 인터셉터 구현 패턴의 변경]
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="entityInterceptor" ref="historyInterceptor"/>
1. 입력
onSave(...)
2. 수정
onFlushDirty(...)
3. 삭제
onDelete(...)
4. 컬렉션 입력/수정/삭제
onCollectionRecreate(...), onCollectionUpdate(...), onCollectionRemove(...)
5. 기타 등등 많이 있음.
이상한점 1
객체가 컬렉션일때(OneToMany) 그 객체들을 삭제하려면?
1. Set.remove(o)를 하면 삭제가 안된다. 왜 안되는지 모르겠다.
2. Set.removeAll(..) 을 해야 삭제가 된다. 그런데 Set 전체를 삭제해야 한다. 일부만 삭제하면 삭제가 안된다. 이건 뭥미??
3. 위와 같은 경우에 인터셉터에 걸리지 않는다. 삭제가 안되었으니까 ..
이상한점 2
afterTransactionBegin(), afterTransactionCompletion(), beforeTransactionCompletion() 얘네들은 도대체 언제 호출되는거야?
기존 객체를 업데이트할때는 생각데로 호출되는거 같다. 그런데 입력/삭제일때는? 좀 이상하다. afterTransactionCompletion() 이후에 onSave()?? 삽질하다가 포기함
- 속성, 이전값, 변경값
https://docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/Interceptor.html
간단히 EmptyInterceptor를 오버라이드해서 쓰면 된다.
[설정, hibernate 4.2는 이렇고 3.x는 설정이 다르다. 인터셉터 구현 패턴의 변경]
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="entityInterceptor" ref="historyInterceptor"/>
1. 입력
onSave(...)
2. 수정
onFlushDirty(...)
3. 삭제
onDelete(...)
4. 컬렉션 입력/수정/삭제
onCollectionRecreate(...), onCollectionUpdate(...), onCollectionRemove(...)
5. 기타 등등 많이 있음.
이상한점 1
객체가 컬렉션일때(OneToMany) 그 객체들을 삭제하려면?
1. Set.remove(o)를 하면 삭제가 안된다. 왜 안되는지 모르겠다.
2. Set.removeAll(..) 을 해야 삭제가 된다. 그런데 Set 전체를 삭제해야 한다. 일부만 삭제하면 삭제가 안된다. 이건 뭥미??
3. 위와 같은 경우에 인터셉터에 걸리지 않는다. 삭제가 안되었으니까 ..
이상한점 2
afterTransactionBegin(), afterTransactionCompletion(), beforeTransactionCompletion() 얘네들은 도대체 언제 호출되는거야?
기존 객체를 업데이트할때는 생각데로 호출되는거 같다. 그런데 입력/삭제일때는? 좀 이상하다. afterTransactionCompletion() 이후에 onSave()?? 삽질하다가 포기함
댓글
댓글 쓰기