0

我正在尝试从 Hibernate Interceptor 访问数据库(我只需要审核在不同表中定义的特定对象)并且无法访问(我得到异常)。有没有办法在拦截器中访问数据库?

我的 AuditTrailInterceptor 是:

public class AuditTrailInterceptor extends EmptyInterceptor {

public boolean onSave(Object entity, Serializable id, Object[] state, String[]    
propertyNames, Type[] types) {
   AuditTrailService serviceComp = (AuditTrailService) SpringBeanFinder
                       .findBean(SpringBeanFinder.AUDIT_SERVICE);
    serviceComp.getObjectAuditCompanies(theCompany)
    return false;
  }

}

@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
      public Collection<ObjectAuditCompany> getObjectAuditCompanies(Company company){
            return  objectAuditCompanyDAO.findByQuery("from " + objectAuditCompanyDAO.getPersistentClass().getName() + " where company=? ", company);

      }

在 applicationContext.xml 中定义为属性的 AuditTrailInterceptor

<bean id="onboardSessionFactory" parent="sessionFactory">
<property name="entityInterceptor">
              <bean class="com.mycompany.daoimpl.AuditTrailInterceptor" />
  </property>
</bean>

谢谢!

4

1 回答 1

0

不确定您到底遇到了什么问题,但我记得我在处理拦截器时遇到的一个绊脚石。

为了在休眠拦截器或事件侦听器中访问数据库,您必须打开一个新会话,并且不能只与被拦截的休眠操作共享一个会话,如果您考虑一下拦截器正在做什么,这是有道理的。 ..

JBoss wiki上有示例代码用于使用拦截器和事件侦听器进行审计日志记录,这可能会有所帮助。

如果这不能帮助您找到解决方案,您可能希望发布更多您尝试过的内容以及问题的堆栈跟踪。

于 2010-07-11T15:55:27.300 回答