저는 스프링 구성된 최대 절전 모드 어플리케이션으로 작업하고 있습니다. 트랜잭션 관리와 entityInterceptor로 정의 된 auditInterceptor가 있습니다. 내가 코드를 디버깅 할 때 나는 그러나의 끝에서, entityInterceptors 방법에 진입하고있어 날짜의 설정되는 것은 그들이 데이터베이스 :(에없는 저장합니다. Hibernate 엔티티 인터셉터가 트리거되지만 설정 값은 저장되지 않습니다.
구성을 다음과 같은 고려<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
hibernate.show_sql=${hibernate.show_sql}
hbm2ddl.auto=${hbm2ddl.auto}
</value>
</property>
<property name="schemaUpdate">
<value>true</value>
</property>
<property name="annotatedClasses">
<list>
.. bunch of annotatedClasses" ...
</list>
</property>
</bean>
<bean name="auditInterceptor" class="com.mbalogos.mba.dao.AuditInterceptor" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
<property name="entityInterceptor" ref="auditInterceptor"/>
</bean>
<bean id="namedQueryDao" class="com.mbalogos.mba.dao.NamedQueryDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
및 저장 방법 다음 entityInterceptor
public class AuditInterceptor extends EmptyInterceptor{
/**
*
*/
private static final long serialVersionUID = -8374988621501998008L;
@Override
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
if(entity instanceof DomainObject){
Timestamp date = new Timestamp(new Date().getTime());
((DomainObject)entity).setCreationDate(date);
((DomainObject)entity).setModificationDate(date);
}
return true;
}
@Override
public boolean onFlushDirty(Object entity, Serializable id,
Object[] currentState, Object[] previousState,
String[] propertyNames, Type[] types) {
if(entity instanceof DomainObject){
DomainObject domainObject = (DomainObject)entity;
Timestamp date = new Timestamp(new Date().getTime());
domainObject.setModificationDate(date);
}
return true;
}
@Override
public void onDelete(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
super.onDelete(entity, id, state, propertyNames, types);
}
@SuppressWarnings("rawtypes")
@Override
public void preFlush(Iterator entities) {
super.preFlush(entities);
}
@SuppressWarnings("rawtypes")
@Override
public void postFlush(Iterator entities) {
super.postFlush(entities);
}
}
따라 sessionFactory의 클래스에 주입
public <T extends DomainObject> T save(T objectToSave) {
Session currentSession = null;
try {
currentSession = sessionFactory.getCurrentSession();
currentSession.save(objectToSave);
return objectToSave;
} catch (Exception ex) {
logger.error(ex);
}
return null;
}
누구든지이 문제가 발생한 이유를 알 수 있습니다. 오, 나는 또한 session.actor를 sessionFactory에 두는 것을 시도했다. 첫 번째 시도 인 transactionManager는 동일한 동작을 시도했다. (
환영합니다. 기쁜 데 도움이되었습니다. – kenny