问题描述:
在实现JPA+security+JWT的rbac时,登录验证的过程中出现了bug。
原因分析:
这是JPA的懒加载问题。hibernate框架与数据库交互的对象为session。no session问题的出现与懒加载有关。懒加载的含义是hibernate执行查询操作时,并不会真正去数据库中查找出数据,而是要等到使用时才去数据库中查找数据。如果session第一次查找中有懒加载,查找完之后关闭了session,这时再想使用懒加载的数据,就得再次调用session查找,但此时session已经关闭,所以发生no session问题。
解决方案:
spring:
jpa:
properties:
hibernate:
enable_lazy_load_no_trans: true//开启懒加载
open-in-view: false//在事务外也可以访问懒加载的数据,默认开启。在使用查询的方法添加@Transactional
补充:dto:数据传输对象。vo:展示对象。如果项目封装了dto对象,采用jpa进行数据库操作,可能会出现懒加载错误,no session问题。