[SPRING] 감사 추적 테이블을 만들기 위해 최대 절전 모드 인터셉터를 사용하여 db에서 페치하지 않고 previouseState를 얻는 방법?
SPRING감사 추적 테이블을 만들기 위해 최대 절전 모드 인터셉터를 사용하여 db에서 페치하지 않고 previouseState를 얻는 방법?
나는 그런 식으로 끝나는 감사 테이블을 만들려고합니다.
최대 절전 모드 EmptyInterceptor 사용 나는이 테이블이 많은 IO를 가질 것이라고 기대한다. onFlushDirty 메서드에서 previouseState가 예상대로 작동하지 않는 것 같습니다.
여기에 표시된대로 db에서 페치하지 않고 어떻게 이전 값을 가져올 수 있습니까?
나는이 지위를 따라 가려고했다.
public class AuditLogInterceptor extends EmptyInterceptor {
private Set inserts = new HashSet();
private Set updates = new HashSet();
private Set deletes = new HashSet();
private Map oldies = new HashMap();
@Override
public boolean onSave(Object entity,
Serializable id,
Object[] state,
String[] propertyNames,
Type[] types)
throws CallbackException {
if (entity instanceof Auditable)
inserts.add((Auditable)entity);
return false;
}
@Override
public void onDelete(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
if (entity instanceof Auditable)
deletes.add((Auditable)entity);
}
@Override
public boolean onFlushDirty(Object entity,
Serializable id,
Object[] currentState,
Object[] previousState,
String[] propertyNames,
Type[] types)
throws CallbackException {
if (entity instanceof Auditable) {
try {
// Use the id and class to get the pre-update state from the database
Session tempSession =
HibernateUtil.getSessionFactory().openSession();
Auditable old = (Auditable) tempSession.get(entity.getClass(), ((Auditable) entity).getId());
oldies.put(old.getId(), old);
updates.add((Auditable)entity);
} catch (Throwable e) {
_log.error(e,e);
}
}
return false;
}
db에 왕복하지 않고 사전 업데이트 상태를 얻는 방법이 있습니까?
해결법
-
==============================
1.다른 방법은 이전 상태를로드에 저장하는 것입니다.
다른 방법은 이전 상태를로드에 저장하는 것입니다.
@Entity @Table(name='Foo') class Foo { @Transient private Foo previousState; @PostLoad private void setPreviousState(){ previousState = new Foo(); //copy the fields } public Foo getPreviousState(){ return previousState; } }
from https://stackoverflow.com/questions/27529208/how-to-get-previousestate-without-fetching-from-the-db-using-hibernate-intercept by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring-Data-Elasticsearch 설정 : Spring은 설정 파일을 찾을 수 없습니까? (0) | 2019.02.22 |
---|---|
[SPRING] 봄 RestTemplate - 비동기 대 sync restTemplate (0) | 2019.02.22 |
[SPRING] 스프링 배치 프로세서 (0) | 2019.02.22 |
[SPRING] 통합 jsf, 봄, 최대 절전 모드. 스프링 빈을 JSF 관리 빈에 삽입하는 방법은 무엇입니까? (0) | 2019.02.22 |
[SPRING] ExtJS 6 + 스프링 부트 스택 (0) | 2019.02.22 |