gpt4 book ai didi

java - 延迟初始化: failed to lazily initialize a collection

转载 作者:行者123 更新时间:2023-12-01 18:42:42 24 4
gpt4 key购买 nike

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: in.aajubaaju.model.User.roles, could not initialize proxy - no Session    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:602)    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:217)    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:581)    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:148)    at org.hibernate.collection.internal.PersistentSet.iterator(PersistentSet.java:188)    at in.aajubaaju.security.service.UserDetailsServiceImpl.loadUserByUsername(UserDetailsServiceImpl.java:41)    at in.aajubaaju.jwt.UserAuthenticationFilter.doFilterInternal(UserAuthenticationFilter.java:36)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)    at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:74)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)    at in.aajubaaju.config.CorsConfig.doFilter(CorsConfig.java:48)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)    at java.lang.Thread.run(Unknown Source)

Here is the Entity class portion

 @ElementCollection
@CollectionTable(name = "user_roles_table",
joinColumns = @JoinColumn(name = "user_id_fk", referencedColumnName = "user_id")
)
@Column(name = "role_name")
private Set<String> roles = new HashSet<String>();

从这里我试图获得角色

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserRepository userRepository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = null;
if (StringUtils.isNotBlank(username)) {
Set<GrantedAuthority> authorities = new HashSet<>();
user = userRepository.findByUsernameIgnoreCase(username);

if (user == null) {
throw new UsernameNotFoundException("UserName Not Found " + username);
}
for (String role : user.getRoles() ) {
authorities.add(new SimpleGrantedAuthority(role));
}
String sessionId = getSessionId();
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpServletRequest req = attr.getRequest();
HttpSession session = req.getSession();
session.setAttribute(ApplicationConstants.SESSION_ID, sessionId);
session.setAttribute(ApplicationConstants.USER_ID, username);
return new UserPrinciple(user.getId(), user.getUsername(), user.getPassword(), authorities);
}
return null;
}

private static String getSessionId() {
return RandomStringUtils.randomAlphanumeric(13);
}

}

最佳答案

尝试在方法loadUserByUsername中使用spring的注释@Transactional

参见Transaction Management来自 Spring 文档。

关于java - 延迟初始化: failed to lazily initialize a collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59893313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com