簡體   English   中英

無法使用注釋在Spring IOC中創建請求范圍Bean

[英]Can't create request scope beans in Spring IOC using annotations

我正在嘗試創建一個允許用戶注冊帳戶的spring應用程序。 這涉及到將數據提交給控制器,該控制器將數據傳遞給調用我的DAO的服務。 這是我有史以來的第一個Spring應用程序,並且我一直在遵循許多不同的指南來使我的應用程序正確運行。

因此,當我將請求范圍添加到bean中時,出現了我的問題。 我將請求范圍添加到服務和模型Bean中,因為單例范圍將數據跨不同的HTTP請求保留在對象中。 因此,當我運行我的應用程序並將數據發送到控制器時,我沒有收到任何控制台錯誤,但是我的應用程序卻無能為力。 當我調試時,我注意到當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 

我以為這與我向bean中添加請求范圍直接相關,這也使我相信自己不知所措。 我已經嘗試解決這個問題已有一個星期了,覺得我已經閱讀了與我的問題有關的每個stackoverflow問題,但是運氣不好。

這是一些相關的源文件(我確實故意刪除了一些軟件包名稱。)

我的配置:

我的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;
}

休眠相關的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;
    }

}

模型豆

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;
    }
}

服務豆

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豆

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();
    }
}

用戶注冊控制器

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);
    }
}

注冊服務實施

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);
    }

}

用戶模型

// 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;
    }

}

用戶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();
        }
    }   
}

在發生錯誤的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)

您正在自動裝配將轉換為CGLibProxy的用戶實體(@Autowired私人用戶user)。 然后,您想將此類CGLib增強的代理保存到數據庫,因此失敗,因為Hibernate對類User $$ EnhancerBySpringCGLIB $$ 332d007d一無所知。

您為什么以這種方式使用用戶實體?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM