骑毛驴追宝马 2018-11-05 06:29 采纳率: 0%
浏览 497

我在实体上定义了一个hibernate filter,在interceptor中开启filter,但是controller中没有应用这个拦截器

我在实体上定义了一个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的共享问题。

    评论

报告相同问题?