hibernate 拦截器与监听器

时间:2021-06-13 16:06:51
 做项目遇到一个自动生成号码编号的需求,现在想在hibernate拦截器或监听器中做处理,也就是在保存对象之前,先从数据库中获取号码编号作为对象的主键;
  现在遇到的问题是,在hibernate的拦截器与监听器中,一旦去数据库查询号码编号,就会报don't flush the Session after an exception occurs 错误。

  现在想知道两个问题:第一,在hibernate拦截器中能不能查询数据库;
                      第二,如果能怎样处理

3 个解决方案

#1


自己定义的拦截器是可以去数据库查询的,你自己定义一个拦截器,实现或者继承已有的类或借口,然后在方法中写自己的方法,最后在xml中配置下

#2


hibernate的实体监听器,不能算是拦截器,它是能监听实体变化。
其实它就是一个hibernate在对一个实体操作时的回调函数。
比如 afertRemove(),就是hibernate删除一个实体后,回调一个这个afertRemove()方法。告诉你这个实体记录删除了。
我不知道这里怎么去查询数据库。
如果你要和数据库交互,还是使用aop拦截器吧

#3


引用 2 楼 ZuxiangHuang 的回复:
hibernate的实体监听器,不能算是拦截器,它是能监听实体变化。
其实它就是一个hibernate在对一个实体操作时的回调函数。
比如 afertRemove(),就是hibernate删除一个实体后,回调一个这个afertRemove()方法。告诉你这个实体记录删除了。
我不知道这里怎么去查询数据库。
如果你要和数据库交互,还是使用aop拦截器吧
谢谢,这个确实是不能够再查询数据库了,现在已经采取其他方式进行了处理

#1


自己定义的拦截器是可以去数据库查询的,你自己定义一个拦截器,实现或者继承已有的类或借口,然后在方法中写自己的方法,最后在xml中配置下

#2


hibernate的实体监听器,不能算是拦截器,它是能监听实体变化。
其实它就是一个hibernate在对一个实体操作时的回调函数。
比如 afertRemove(),就是hibernate删除一个实体后,回调一个这个afertRemove()方法。告诉你这个实体记录删除了。
我不知道这里怎么去查询数据库。
如果你要和数据库交互,还是使用aop拦截器吧

#3


引用 2 楼 ZuxiangHuang 的回复:
hibernate的实体监听器,不能算是拦截器,它是能监听实体变化。
其实它就是一个hibernate在对一个实体操作时的回调函数。
比如 afertRemove(),就是hibernate删除一个实体后,回调一个这个afertRemove()方法。告诉你这个实体记录删除了。
我不知道这里怎么去查询数据库。
如果你要和数据库交互,还是使用aop拦截器吧
谢谢,这个确实是不能够再查询数据库了,现在已经采取其他方式进行了处理