Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在筛选器中访问spring引导数据jpa实体_Java_Spring_Spring Boot_Spring Data Jpa_Servlet Filters - Fatal编程技术网

Java 在筛选器中访问spring引导数据jpa实体

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

目前,我正在尝试将基于servlet的应用程序转换为带有控制器的spring引导应用程序。设置过滤器后,在访问entities函数时遇到“无法初始化代理-无会话”异常。(此处:用户方法“isAdmin”)

我设置了如下过滤器:

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]