Java 在筛选器中访问spring引导数据jpa实体
目前,我正在尝试将基于servlet的应用程序转换为带有控制器的spring引导应用程序。设置过滤器后,在访问entities函数时遇到“无法初始化代理-无会话”异常。(此处:用户方法“isAdmin”) 我设置了如下过滤器:Java 在筛选器中访问spring引导数据jpa实体,java,spring,spring-boot,spring-data-jpa,servlet-filters,Java,Spring,Spring Boot,Spring Data Jpa,Servlet Filters,目前,我正在尝试将基于servlet的应用程序转换为带有控制器的spring引导应用程序。设置过滤器后,在访问entities函数时遇到“无法初始化代理-无会话”异常。(此处:用户方法“isAdmin”) 我设置了如下过滤器: public class AdminFilter implements Filter { @Autowired UserRepository userRepository; @Override @Transactional public void
public class AdminFilter implements Filter {
@Autowired
UserRepository userRepository;
@Override
@Transactional
public void doFilter(ServletRequest aRequest, ServletResponse aResponse, FilterChain aFilterChain)
throws IOException, ServletException {
User u = userRepository.getOne(5l).orElse(null);
System.out.println(u.isAdmin());
aFilterChain.doFilter(aRequest, aResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
filterConfig.getServletContext());
}
@Override
public void destroy() {
}
}
实现了筛选器接口,并将筛选器添加到@Configuration标记的类中,以便将筛选器注册到“/admin”:
自动布线支持由以下语句启用:
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
filterConfig.getServletContext());
我试图将@Transactional添加到方法中,还添加了OpenSessionInViewFilter,但没有成功
在我的控制器bean(@Controller)中,我可以毫无问题地访问从自动连线存储库检索到的实体的功能
函数仅从用户实体返回一个值:
public boolean isAdmin() {
return admin;
}
知道我为什么会出错以及如何修复它吗
斜切:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:148) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:266) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:73) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at de.seeme.web.persistence.User_$$_jvst43d_a.isAdmin(User_$$_jvst43d_a.java) ~[bin/:na]
问候
杰莫拉该死。使用userRepository.find(id)进行了尝试,一切正常 使用getOne,您将只获得对仅包含id的实体的引用(用于存在性检查或类似检查)
您可以共享@Configuration类吗?
isAdmin()方法在做什么?你能分享更多细节吗?我相信你可以在UserRepository
@IssamELATIF中创建一个更健壮的finder方法,如果我更新了我的问题,但是配置文件是空的,除了过滤器注册…@antonovopashin我更新了问题。它只是从实体返回一个布尔值。“创建一个更健壮的查找方法”是什么意思?entityManager是如何定义的?
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:148) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:266) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:73) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at de.seeme.web.persistence.User_$$_jvst43d_a.isAdmin(User_$$_jvst43d_a.java) ~[bin/:na]