/* * Copyright 2011-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package kr.debop4j.data.hibernate.interceptor; import kr.debop4j.data.model.IStatefulEntity; import lombok.extern.slf4j.Slf4j; import org.hibernate.EmptyInterceptor; import org.hibernate.type.Type; import java.io.Serializable; /** * 엔티티의 상태 정보를 갱신하는 Interceptor입니다. * * @author 배성혁 ( sunghyouk.bae@gmail.com ) * @since 12. 11. 21. */ @Slf4j public class StatefulEntityInterceptor extends EmptyInterceptor { private static final long serialVersionUID = 6945967982003155513L; /** 엔티티가 영구 저장소에 저장된 엔티티인지 여부를 반환합니다. */ public Boolean isPersisted(Object entity) { if (entity instanceof IStatefulEntity) return ((IStatefulEntity) entity).isPersisted(); return null; } /** 엔티티를 저장소로부터 로드한 후에 발생하는 이벤트입니다. 엔티티의 isPersisted 상태를 true 로 설정합니다. */ @Override public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { if (entity instanceof IStatefulEntity) { ((IStatefulEntity) entity).onLoad(); } return false; } /** 엔티티가 삭제된 후에 호출되는 메소드입니다. 엔티티의 isPersisted 상태를 false 로 설정합니다. */ public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { if (entity instanceof IStatefulEntity) { ((IStatefulEntity) entity).onSave(); } return false; } }