我在实体上定义了一个hibernate filter,在interceptor中开启filter,但是controller中没有应用这个拦截器 ,请问一下原因是什么,EntityManager中的session在不同的类里是会发生变化的么?
1条回答 默认 最新
你知我知皆知 2024-08-07 07:44关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在Hibernate中,如果你在控制器(Controller)中使用了拦截器(Interceptor),但是在实体(Entity)类上定义了HQL查询,那么这些查询将会被忽略。这是因为Hibernate会将所有的HQL查询都放在一个单独的线程中执行,而不会在任何其他线程中执行。
然而,如果你在一个方法中调用了
entityManager.createQuery()或者entityManager.createNativeQuery()方法来创建一个SQL查询,这些查询就会被执行,并且会被映射到数据库表中。如果在实体类和控制器之间存在多个不同类型的类,每个类都有自己的
entityManager实例,则entityManager可能会在其中的一个类上调用createQuery()或createNativeQuery()方法。这时,这些查询将只影响当前类中声明了拦截器的方法。至于你在同一个类的不同方法中多次调用
entityManager,这取决于你如何处理entityManager。例如,你可以为每个方法创建一个新的entityManager实例,这样每次调用时都会有一个新的entityManager实例,这应该可以避免entityManager的共享问题。解决 无用评论 打赏 举报