Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
Spring 使用HibernateTemplate持久化CGLIB代理实体_Spring_Hibernate_Proxy_Cglib - Fatal编程技术网

Spring 使用HibernateTemplate持久化CGLIB代理实体

Spring 使用HibernateTemplate持久化CGLIB代理实体,spring,hibernate,proxy,cglib,Spring,Hibernate,Proxy,Cglib,我几乎找遍了所有地方,但似乎没有人有这个问题。 我有SpringMVC应用程序。 有一个UserImpl实体,它在上下文配置文件中声明为请求范围的bean,并由UsersController引用。UsersController引用的UserImpl对象实际上是一个CGLib代理(为什么?)。现在,当我第一次尝试使用HibernateTemplate持久化这样的代理对象时,我遇到了以下错误: org.hibernate.MappingException:未知实体: main.mvc.model.h

我几乎找遍了所有地方,但似乎没有人有这个问题。 我有SpringMVC应用程序。 有一个UserImpl实体,它在上下文配置文件中声明为请求范围的bean,并由UsersController引用。UsersController引用的UserImpl对象实际上是一个CGLib代理(为什么?)。现在,当我第一次尝试使用HibernateTemplate持久化这样的代理对象时,我遇到了以下错误:

org.hibernate.MappingException:未知实体: main.mvc.model.hibernate.UserImpl$$enhancerbyglib$$9ac49631

经过一番搜索,我发现了如下内容:

org.springframework.orm.hibernate3.support.ScopedBeanInterceptor

这解决了问题。现在我没有得到MappingException,实体被持久化了,但是。。。数据库记录中的每个字段都为空。有什么问题吗

注: 当我硬编码UserImpl实例并使用UserServiceImpl持久化它时,一切都正常

上下文配置的一部分:

<bean id="userService" class="main.mvc.model.hibernate.UserServiceImpl"/>
<bean id="userValidator" class="main.validators.UserValidator"/>
<bean id="userWrapperValidator" class="main.validators.UserWrapperValidator"/>
<bean id="user" class="main.mvc.model.hibernate.UserImpl" scope="request">
    <aop:scoped-proxy/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="main.mvc.model.hibernate"/>
    <property name="entityInterceptor">
<bean class="org.springframework.orm.hibernate3.support.ScopedBeanInterceptor"/>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>
UserServiceImpl:

public class UserServiceImpl extends HibernateDaoSupport implements UserService {

    private PasswordEncoder passwordEncoder;
    private SaltSource saltSource;

    @Inject
    public UserServiceImpl(SessionFactory sessionFactory, PasswordEncoder passwordEncoder, SaltSource saltSource) {
        super();
        setSessionFactory(sessionFactory);
        setPasswordEncoder(passwordEncoder);
        setSaltSource(saltSource);
    }

    public void save(User user) {
        Date creationTime = new Date();
        user.setCreationDate(creationTime);
        user.setLastModified(creationTime);

        List<Role> roles = new LinkedList<>();
        roles.add(Role.ROLE_USER);
        user.setRoles(roles);

        Logger.getLogger(getClass()).info(user);
        getHibernateTemplate().save(user);
    }
...
}
公共类UserServiceImpl扩展了HibernateDaoSupport实现UserService{
专用密码编码器;
私人盐源盐源;
@注入
public UserServiceImpl(SessionFactory SessionFactory、PasswordEncoder PasswordEncoder、SaltSource SaltSource){
超级();
设置会话工厂(会话工厂);
设置密码编码器(密码编码器);
设置盐源(盐源);
}
公共作废保存(用户){
Date creationTime=新日期();
user.setCreationDate(creationTime);
user.setLastModified(creationTime);
列表角色=新建LinkedList();
roles.add(Role.Role\u用户);
user.setRoles(角色);
Logger.getLogger(getClass()).info(用户);
getHibernateTemplate().save(用户);
}
...
}
更新
好的,我已经添加了一些AOP magic add输出,在ScoppedBeanInterceptor中处理实体对象时会发生什么。它完好无损。尽管Hibernate的BasicBinder将空值绑定到SQL语句。有什么帮助吗

日志:

11:27:51866 DEBUG org.hibernate.SQL:111-选择userimpl0.id作为id1,userimpl0.creationDate作为creation2,userimpl0.lastModified作为lastModi3,userimpl0.city作为city1,userimpl0.country作为country 1,userimpl0.latitude作为纬度1,userimpl0.longitude作为经度1,userimpl0.postalCode作为postalCode,userimpl0_uu0.street作为street1_u0,userimpl0_u0.birthDate作为birthDate 1_0,userimpl0_0.firstName作为firstName1_0,userimpl0_0.secondName作为secondName1_0,userimpl0_0.sex作为sex1_0,userimpl0_0.姓氏作为姓氏1_0,userimpl0.alias作为alias1_0,userimpl0,userimpl0.preferences\u id作为prefere19\u 1来自TBL\u USER userimpl0\u其中userimpl0\u.loginEmail=?
11:27:51878 TRACE org.hibernate.type.descriptor.sql.BasicBinder:81-将参数[1]绑定为[VARCHAR]-blady__best@o2.pl
11:27:52009信息hsqldb.db.HSQLDB39E3504C79.引擎:?-数据库关闭
11:27:52225 DEBUG org.hibernate.SQL:111-选择userimpl0.id作为id1,userimpl0.creationDate作为creation2,userimpl0.lastModified作为lastModi3,userimpl0.city作为city1,userimpl0.country作为country1,userimpl0.latitude作为纬度1,userimpl0.lastModi3作为经度1,userimpl0.postalCode作为postalCode,userimpl0_uu0.street作为street1_u0,userimpl0_u0.birthDate作为birthDate 1_0,userimpl0_0.firstName作为firstName1_0,userimpl0_0.secondName作为secondName1_0,userimpl0_0.sex作为sex1_0,userimpl0_0.姓氏作为姓氏1_0,userimpl0.alias作为alias1_0,userimpl0,userimpl0.preferences\u id作为prefere19\u 1来自TBL\u USER userimpl0\u其中userimpl0.alias=?
11:27:52230 TRACE org.hibernate.type.descriptor.sql.BasicBinder:81-将参数[1]绑定为[VARCHAR]-Bladositto
11:27:52346信息hsqldb.db.HSQLDB39E3504C79.引擎:?-数据库关闭
11:27:52470信息模型.hibernate.userserviceinpl:50-User[id:null loginEmail:blady__best@o2.pl别名:Bladositto密码:asdasd]类类型:类模型.hibernate.UserImpl$$enhancerbyglib$$536b42dd
11:27:52481信息助手。EntityAuditor:13-用户[id:null loginEmail:blady__best@o2.pl别名:Bladositto密码:asdasd]
11:27:52483信息助手。EntityAuditor:13-用户[id:null loginEmail:blady__best@o2.pl别名:Bladositto密码:asdasd]
11:27:52581调试org.hibernate.SQL:111-插入TBL_用户(id、creationDate、lastModified、城市、国家、纬度、经度、邮政编码、街道、出生日期、名、次名、性别、姓氏、别名、启用、登录邮箱、密码、首选项_id)值(默认值、、、、、、、、、、、、、、、、、、、、、)
11:27:52587跟踪org.hibernate.type.descriptor.sql.BasicBinder:70-将参数[1]绑定为[TIMESTAMP]-
11:27:52589 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70-将参数[2]绑定为[TIMESTAMP]-
11:27:52590跟踪org.hibernate.type.descriptor.sql.BasicBinder:70-绑定参数[3]为[VARCHAR]-
11:27:52604 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70-将参数[4]绑定为[VARCHAR]-
11:27:52606 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70-将参数[5]绑定为[DOUBLE]-
11:27:52609 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70-将参数[6]绑定为[DOUBLE]-
11:27:52610 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70-将参数[7]绑定为[VARCHAR]-
11:27:52611 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70-绑定参数[8]为[VARCHAR]-
11:27:52612 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70-将参数[9]绑定为[DATE]-
11:27:52614 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70-将参数[10]绑定为[VARCHAR]-
11:27:52615跟踪org.hibernate.type.descriptor.sql.BasicBinder:70
public class UserServiceImpl extends HibernateDaoSupport implements UserService {

    private PasswordEncoder passwordEncoder;
    private SaltSource saltSource;

    @Inject
    public UserServiceImpl(SessionFactory sessionFactory, PasswordEncoder passwordEncoder, SaltSource saltSource) {
        super();
        setSessionFactory(sessionFactory);
        setPasswordEncoder(passwordEncoder);
        setSaltSource(saltSource);
    }

    public void save(User user) {
        Date creationTime = new Date();
        user.setCreationDate(creationTime);
        user.setLastModified(creationTime);

        List<Role> roles = new LinkedList<>();
        roles.add(Role.ROLE_USER);
        user.setRoles(roles);

        Logger.getLogger(getClass()).info(user);
        getHibernateTemplate().save(user);
    }
...
}
11:27:51,866 DEBUG org.hibernate.SQL:111 - select userimpl0_.id as id1_, userimpl0_.creationDate as creation2_1_, userimpl0_.lastModified as lastModi3_1_, userimpl0_.city as city1_, userimpl0_.country as country1_, userimpl0_.latitude as latitude1_, userimpl0_.longitude as longitude1_, userimpl0_.postalCode as postalCode1_, userimpl0_.street as street1_, userimpl0_.birthDate as birthDate1_, userimpl0_.firstName as firstName1_, userimpl0_.secondName as secondName1_, userimpl0_.sex as sex1_, userimpl0_.surName as surName1_, userimpl0_.alias as alias1_, userimpl0_.enabled as enabled1_, userimpl0_.loginEmail as loginEmail1_, userimpl0_.password as password1_, userimpl0_.preferences_id as prefere19_1_ from TBL_USER userimpl0_ where userimpl0_.loginEmail=?
11:27:51,878 TRACE org.hibernate.type.descriptor.sql.BasicBinder:81 - binding parameter [1] as [VARCHAR] - blady_the_best@o2.pl
11:27:52,009  INFO hsqldb.db.HSQLDB39E3504C79.ENGINE:? - Database closed
11:27:52,225 DEBUG org.hibernate.SQL:111 - select userimpl0_.id as id1_, userimpl0_.creationDate as creation2_1_, userimpl0_.lastModified as lastModi3_1_, userimpl0_.city as city1_, userimpl0_.country as country1_, userimpl0_.latitude as latitude1_, userimpl0_.longitude as longitude1_, userimpl0_.postalCode as postalCode1_, userimpl0_.street as street1_, userimpl0_.birthDate as birthDate1_, userimpl0_.firstName as firstName1_, userimpl0_.secondName as secondName1_, userimpl0_.sex as sex1_, userimpl0_.surName as surName1_, userimpl0_.alias as alias1_, userimpl0_.enabled as enabled1_, userimpl0_.loginEmail as loginEmail1_, userimpl0_.password as password1_, userimpl0_.preferences_id as prefere19_1_ from TBL_USER userimpl0_ where userimpl0_.alias=?
11:27:52,230 TRACE org.hibernate.type.descriptor.sql.BasicBinder:81 - binding parameter [1] as [VARCHAR] - Bladositto
11:27:52,346  INFO hsqldb.db.HSQLDB39E3504C79.ENGINE:? - Database closed
11:27:52,470  INFO model.hibernate.UserServiceImpl:50 - User[id: null    loginEmail: blady_the_best@o2.pl    alias: Bladositto   password: asdasd]   class type:class model.hibernate.UserImpl$$EnhancerByCGLIB$$536b42dd
11:27:52,481  INFO helpers.EntityAuditor:13 - User[id: null  loginEmail: blady_the_best@o2.pl    alias: Bladositto   password: asdasd]
11:27:52,483  INFO helpers.EntityAuditor:13 - User[id: null  loginEmail: blady_the_best@o2.pl    alias: Bladositto   password: asdasd]
11:27:52,581 DEBUG org.hibernate.SQL:111 - insert into TBL_USER (id, creationDate, lastModified, city, country, latitude, longitude, postalCode, street, birthDate, firstName, secondName, sex, surName, alias, enabled, loginEmail, password, preferences_id) values (default, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
11:27:52,587 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [1] as [TIMESTAMP] - <null>
11:27:52,589 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [2] as [TIMESTAMP] - <null>
11:27:52,590 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [3] as [VARCHAR] - <null>
11:27:52,604 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [4] as [VARCHAR] - <null>
11:27:52,606 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [5] as [DOUBLE] - <null>
11:27:52,609 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [6] as [DOUBLE] - <null>
11:27:52,610 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [7] as [VARCHAR] - <null>
11:27:52,611 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [8] as [VARCHAR] - <null>
11:27:52,612 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [9] as [DATE] - <null>
11:27:52,614 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [10] as [VARCHAR] - <null>
11:27:52,615 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [11] as [VARCHAR] - <null>
11:27:52,616 DEBUG org.hibernate.type.EnumType:136 - Binding null to parameter: 12
11:27:52,618 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [13] as [VARCHAR] - <null>
11:27:52,619 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [14] as [VARCHAR] - <null>
11:27:52,621 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [15] as [BIT] - <null>
11:27:52,621 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [16] as [VARCHAR] - <null>
11:27:52,623 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [17] as [VARCHAR] - <null>
11:27:52,625 TRACE org.hibernate.type.descriptor.sql.BasicBinder:70 - binding parameter [18] as [BIGINT] - <null>
11:27:52,767  INFO hsqldb.db.HSQLDB39E3504C79.ENGINE:? - Database closed
getHibernateTemplate().save( user );
getHibernateTemplate().save( User.class.getName(), user );