Aru*_*n R 5 aop spring hibernate
我们对项目有要求,我们需要维护对应用程序中某些实体所做的更改的历史记录.Application是一个基于Struts,Spring和Hibernate的Java Web App.在这种情况下使用了哪种方法?
是否还有其他方法可以进行此类活动?
因为你说
所有编辑都没有相应的不同方法...许多编辑发生在单个 java 方法中
即使您的方法只接收一个参数作为参数并且您可以检索其关系,AOP 仍然是一个好主意。我强烈建议你看看这篇好文章
Hibernate 文档本身说:
Hibernate Interceptor 允许应用程序在保存、更新、删除或加载持久对象之前检查和/或操作持久对象的属性。其一种可能的用途是跟踪审计信息。
但它也说
确保您不存储特定于会话的状态,因为多个会话可能同时使用此拦截器
如果使用 Spring 管理的事务,则可以使用sessionFactory.getCurrentSession()获取附加到当前线程的会话;
public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
if(entity instanceof SomeEntity) {
Session session = sessionFactory.getCurrentSession();
Run Code Online (Sandbox Code Playgroud)
请参阅getCurrentSession()文档
如果没有,您应该创建一个本地 Hibernate 拦截器(附加到打开的 Session)而不是全局拦截器(附加到 SessionFactory),然后设置其会话
AuditableInterceptor interceptor = new AuditableInterceptor()
Session session = sessionFactory.openSession(interceptor);
/**
* do it before processing anything if you use local interceptor
*/
interceptor.setSession(session);
Run Code Online (Sandbox Code Playgroud)
关于触发器,它取决于其他问题,例如数据库管理(您具有数据库管理访问权限。如果没有,与 DBA 交谈是您最好的选择)。
| 归档时间: |
|
| 查看次数: |
1648 次 |
| 最近记录: |