[英]Can't create request scope beans in Spring IOC using annotations
I am trying to create a spring application that allows user to register an account. 我正在尝试创建一个允许用户注册帐户的spring应用程序。 This involves submitting data to a controller which passes data to a service which calls my DAO. 这涉及到将数据提交给控制器,该控制器将数据传递给调用我的DAO的服务。 This is my first Spring application ever and I have been following a bunch of different guides to get my application where it is. 这是我有史以来的第一个Spring应用程序,并且我一直在遵循许多不同的指南来使我的应用程序正确运行。
So my problem arose when I added the request scope to my beans. 因此,当我将请求范围添加到bean中时,出现了我的问题。 I added request scope to the service and models beans since the singleton scope was leaving data in my object across different http requests. 我将请求范围添加到服务和模型Bean中,因为单例范围将数据跨不同的HTTP请求保留在对象中。 So when I run my application and send data to my controllers I don't get any console errors, but my application doesn't do anything. 因此,当我运行我的应用程序并将数据发送到控制器时,我没有收到任何控制台错误,但是我的应用程序却无能为力。 When I debugged I notice that I get this error when the DAO tries to insert the user object "org.hibernate.MappingException: Unknown entity: com.nvc.slink.model.User$$EnhancerBySpringCGLIB$$6c38e058" When I looked into my user object when I got this error I noticed that it had weird member variables: 当我调试时,我注意到当DAO尝试插入用户对象“ org.hibernate.MappingException:未知实体:com.nvc.slink.model.User $$ EnhancerBySpringCGLIB $$ 6c38e058”时,出现此错误。用户对象出现此错误时,我注意到它具有奇怪的成员变量:
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor@5ced77ee
org.springframework.aop.framework.CglibAopProxy$DynamicUnadvisedInterceptor@40464597
org.springframework.aop.framework.CglibAopProxy$SerializableNoOp@21df885d
org.springframework.aop.framework.CglibAopProxy$SerializableNoOp@5c608df2
org.springframework.aop.framework.CglibAopProxy$AdvisedDispatcher@6b85c397
org.springframework.aop.framework.CglibAopProxy$EqualsInterceptor@191d598d
org.springframework.aop.framework.CglibAopProxy$HashCodeInterceptor@445db793
I'm assuming this is directly related to my addition of the request scope to my beans which also leads me to believe I dun messed up. 我以为这与我向bean中添加请求范围直接相关,这也使我相信自己不知所措。 I have been trying to fix this problem for a week now and feel like i've read every stackoverflow question related to my problem, but with no luck in solving issue. 我已经尝试解决这个问题已有一个星期了,觉得我已经阅读了与我的问题有关的每个stackoverflow问题,但是运气不好。
Here are some relevant source files (I did blot out some of the package names deliberately.) 这是一些相关的源文件(我确实故意删除了一些软件包名称。)
My configurations: 我的配置:
My java run class. 我的Java运行类。
//Application.java
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@ComponentScan
@EnableTransactionManagement
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(applicationClass);
}
private static Class<Application> applicationClass = Application.class;
}
Hibernate related Beans 休眠相关的Bean
//HibernateConfig.java
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.google.common.base.Preconditions;
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:hibernate.properties" })
@ComponentScan({ "xx.xxx.xxxx" })
public class HibernateConfig {
@Autowired
private Environment env;
public HibernateConfig() {
super();
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(restDataSource());
sessionFactory.setPackagesToScan(new String[] { "com.nvc.slink.model" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource restDataSource() {
final BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url")));
dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user")));
dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass")));
return dataSource;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(final SessionFactory sessionFactory) {
final HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
final Properties hibernateProperties() {
final Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
hibernateProperties.setProperty("hibernate.show_sql", "true");
// hibernateProperties.setProperty("hibernate.format_sql", "true");
// hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true");
return hibernateProperties;
}
} }
Model beans 模型豆
import java.util.Date;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import com.nvc.slink.model.User;
import com.nvc.slink.model.Userauthentication;
@Configuration
@ComponentScan({ "XX.XXX.XXXX" })
public class ModelConfig {
@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public User user(){
Date d = new Date();
User u = new User();
u.setULastactive(d);
return u;
}
@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Userauthentication userauthentication(){
Userauthentication ua = new Userauthentication();
return ua;
}
}
Service Beans 服务豆
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import com.nvc.slink.service.RegisterServiceImpl;
import com.nvc.slink.service.UserServiceImpl;
@Configuration
@ComponentScan({ "XX.XXX.XXXX" })
public class ServiceConfig {
@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public UserServiceImpl userService(){
return new UserServiceImpl();
}
@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public RegisterServiceImpl registerService(){
return new RegisterServiceImpl();
}
}
DAO beans DAO豆
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.nvc.slink.dao.RegisterDaoImpl;
import com.nvc.slink.dao.UserDaoImpl;
@Configuration
@ComponentScan({ "XX.XXX.XXXX" })
public class DaoConfig {
@Bean
public UserDaoImpl userDao(){
return new UserDaoImpl();
}
@Bean
public RegisterDaoImpl registerDao(){
return new RegisterDaoImpl();
}
}
User Registration Controller 用户注册控制器
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.nvc.slink.service.IRegisterService;
import com.nvc.slink.transfermodels.UserTO;
@RestController
public class RegisterController {
@Autowired
private IRegisterService registerService;
/*
@Autowired
private IUserService userService;
@RequestMapping("/name/{name}")
public String greeting(@PathVariable String name) {
return name;
}
@RequestMapping("/all")
public List<User> index() {
return userService.getAllUsers();
}*/
@RequestMapping(value= "/register", method = RequestMethod.POST)
public Object register(@Valid @RequestBody UserTO user,BindingResult result){ //Make into register Object
if (result.hasErrors()) {
return result.getAllErrors();
}
return registerService.register(user);
}
}
Register Service implementation 注册服务实施
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.encrypt.Encryptors;
import org.springframework.security.crypto.encrypt.TextEncryptor;
import org.springframework.security.crypto.keygen.KeyGenerators;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.nvc.slink.dao.IRegisterDao;
import com.nvc.slink.model.User;
import com.nvc.slink.model.Userauthentication;
import com.nvc.slink.transfermodels.UserTO;
import com.nvc.slink.transfermodels.UserauthenticationTO;
@Service
@Transactional
public class RegisterServiceImpl implements IRegisterService {
@Autowired
private IRegisterDao registerDao;
@Autowired
private User user;
@Autowired
private Userauthentication userauthentication;
@Override
public void encryptUA(Userauthentication unencrypted) {
String salt = KeyGenerators.string().generateKey();
TextEncryptor encrypter = Encryptors.text("password", salt);
// TODO Create secure encryption password
String encrypted = encrypter.encrypt(unencrypted.getUaPassword());
unencrypted.setUaPassword(encrypted);
unencrypted.setUaSalt(salt);
}
@Override
public User createNewUser(User u) {
try {
registerDao.insertUser(u);
return u;
} catch (Exception e) {
return null;
}
}
@Override
public User register(UserTO uTO) {
UserauthenticationTO uaTO = uTO.getUserauthentication();
userauthentication.setUaPassword(uaTO.getPassword());
user.setUserauthentication(userauthentication);
user.setUEmail(uTO.getEmail());
user.setUUsername(uTO.getUsername());
this.encryptUA(userauthentication);
return this.createNewUser(user);
}
}
User Model 用户模型
// Generated Dec 29, 2014 7:43:39 PM by Hibernate Tools 4.3.1
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
/**
* User generated by hbm2java
*/
@Entity
@Table(name = "user", catalog = "slinkdb", uniqueConstraints = {
@UniqueConstraint(columnNames = "u_iduserauthentication"),
@UniqueConstraint(columnNames = "u_email"),
@UniqueConstraint(columnNames = "u_username") })
public class User implements java.io.Serializable {
private Integer iduser;
private Userauthentication userauthentication;
private String UEmail;
private String UImgsrc;
private Date ULastactive;
private boolean UPrivate = false;
private String UUsername;
private Set<UserCode> userCodes = new HashSet<UserCode>(0);
private Set<UserDefault> userDefaults = new HashSet<UserDefault>(0);
private Set<Gateway> gateways = new HashSet<Gateway>(0);
public User() {
}
public User(String UEmail, boolean UPrivate) {
this.UEmail = UEmail;
this.UPrivate = UPrivate;
}
public User(Userauthentication userauthentication, String UEmail,
String UImgsrc, Date ULastactive, boolean UPrivate,
String UUsername, Set<UserCode> userCodes,
Set<UserDefault> userDefaults, Set<Gateway> gateways) {
this.userauthentication = userauthentication;
this.UEmail = UEmail;
this.UImgsrc = UImgsrc;
this.ULastactive = ULastactive;
this.UPrivate = UPrivate;
this.UUsername = UUsername;
this.userCodes = userCodes;
this.userDefaults = userDefaults;
this.gateways = gateways;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "iduser", unique = true, nullable = false)
public Integer getIduser() {
return this.iduser;
}
public void setIduser(Integer iduser) {
this.iduser = iduser;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "u_iduserauthentication", unique = true)
@Cascade(CascadeType.ALL)
public Userauthentication getUserauthentication() {
return this.userauthentication;
}
public void setUserauthentication(Userauthentication userauthentication) {
this.userauthentication = userauthentication;
}
@Column(name = "u_email", unique = true, nullable = false, length = 100)
public String getUEmail() {
return this.UEmail;
}
public void setUEmail(String UEmail) {
this.UEmail = UEmail;
}
@Column(name = "u_imgsrc", length = 45)
public String getUImgsrc() {
return this.UImgsrc;
}
public void setUImgsrc(String UImgsrc) {
this.UImgsrc = UImgsrc;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "u_lastactive", length = 19)
public Date getULastactive() {
return this.ULastactive;
}
public void setULastactive(Date ULastactive) {
this.ULastactive = ULastactive;
}
@Column(name = "u_private", nullable = false)
public boolean isUPrivate() {
return this.UPrivate;
}
public void setUPrivate(boolean UPrivate) {
this.UPrivate = UPrivate;
}
@Column(name = "u_username", unique = true, length = 45)
public String getUUsername() {
return this.UUsername;
}
public void setUUsername(String UUsername) {
this.UUsername = UUsername;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
public Set<UserCode> getUserCodes() {
return this.userCodes;
}
public void setUserCodes(Set<UserCode> userCodes) {
this.userCodes = userCodes;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
public Set<UserDefault> getUserDefaults() {
return this.userDefaults;
}
public void setUserDefaults(Set<UserDefault> userDefaults) {
this.userDefaults = userDefaults;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
public Set<Gateway> getGateways() {
return this.gateways;
}
public void setGateways(Set<Gateway> gateways) {
this.gateways = gateways;
}
}
User DAO 用户DAO
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.nvc.slink.model.User;
@Repository
public class RegisterDaoImpl implements IRegisterDao {
@Autowired
private SessionFactory sessionFactory;
@Override
public User insertUser(User u) throws Exception {
try{
Session session = sessionFactory.getCurrentSession();
session.save(u);
return u;
}catch(Exception e){ //Could not insert user;
throw new Exception();
}
}
}
Full stack trace added at DAO level where error occurs. 在发生错误的DAO级别添加了完整的堆栈跟踪。
org.hibernate.MappingException: Unknown entity: com.nvc.slink.model.User$$EnhancerBySpringCGLIB$$332d007d
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1096)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1443)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:116)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
at com.nvc.slink.dao.RegisterDaoImpl.insertUser(RegisterDaoImpl.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy61.insertUser(Unknown Source)
at com.nvc.slink.service.RegisterServiceImpl.createNewUser(RegisterServiceImpl.java:43)
at com.nvc.slink.service.RegisterServiceImpl.register(RegisterServiceImpl.java:58)
at com.nvc.slink.service.RegisterServiceImpl$$FastClassBySpringCGLIB$$8757c338.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)
at com.nvc.slink.service.RegisterServiceImpl$$EnhancerBySpringCGLIB$$ce76b984.register(<generated>)
at com.nvc.slink.service.RegisterServiceImpl$$FastClassBySpringCGLIB$$8757c338.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)
at com.nvc.slink.service.RegisterServiceImpl$$EnhancerBySpringCGLIB$$d399c44.register(<generated>)
at com.nvc.slink.controller.RegisterController.register(RegisterController.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
You are autowiring User entity ( @Autowired private User user ) which is converted to CGLibProxy. 您正在自动装配将转换为CGLibProxy的用户实体(@Autowired私人用户user)。 Then you want to save such CGLib enhanced proxy to the database and so it fails since Hibernate knows nothing about class User$$EnhancerBySpringCGLIB$$332d007d. 然后,您想将此类CGLib增强的代理保存到数据库,因此失败,因为Hibernate对类User $$ EnhancerBySpringCGLIB $$ 332d007d一无所知。
Why are you using User entity in such a way ? 您为什么以这种方式使用用户实体?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.