Hibernate 我无法更新我的对象
我正在用hibernate构建一个SpringWeb应用程序。我不知道为什么,但我不能更新我的对象。低于我的配置Hibernate 我无法更新我的对象,hibernate,spring,Hibernate,Spring,我正在用hibernate构建一个SpringWeb应用程序。我不知道为什么,但我不能更新我的对象。低于我的配置 <bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="luxpolDataSource" />
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="luxpolDataSource" />
<property name="annotatedClasses">
<list>
<value>com.fixus.luxpol.bean.House</value>
<value>com.fixus.luxpol.bean.Photo</value>
<value>com.fixus.luxpol.bean.Service</value>
<value>com.fixus.luxpol.bean.User</value>
<value>com.fixus.luxpol.bean.AccountRole</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<mvc:annotation-driven />
<context:component-scan base-package="com.fixus.luxpol" />
<context:component-scan base-package="com.fixus.luxpol.bean" />
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="luxpolDataSource" />
<property name="annotatedClasses">
<list>
<value>com.fixus.luxpol.bean.House</value>
<value>com.fixus.luxpol.bean.Photo</value>
<value>com.fixus.luxpol.bean.Service</value>
<value>com.fixus.luxpol.bean.User</value>
<value>com.fixus.luxpol.bean.AccountRole</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<mvc:annotation-driven />
<context:component-scan base-package="com.fixus.luxpol" />
<context:component-scan base-package="com.fixus.luxpol.bean" />
我使用update(objectobj)方法使用hibernate模板进行更新
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="luxpolDataSource" />
<property name="annotatedClasses">
<list>
<value>com.fixus.luxpol.bean.House</value>
<value>com.fixus.luxpol.bean.Photo</value>
<value>com.fixus.luxpol.bean.Service</value>
<value>com.fixus.luxpol.bean.User</value>
<value>com.fixus.luxpol.bean.AccountRole</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<mvc:annotation-driven />
<context:component-scan base-package="com.fixus.luxpol" />
<context:component-scan base-package="com.fixus.luxpol.bean" />
----更新
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="luxpolDataSource" />
<property name="annotatedClasses">
<list>
<value>com.fixus.luxpol.bean.House</value>
<value>com.fixus.luxpol.bean.Photo</value>
<value>com.fixus.luxpol.bean.Service</value>
<value>com.fixus.luxpol.bean.User</value>
<value>com.fixus.luxpol.bean.AccountRole</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<mvc:annotation-driven />
<context:component-scan base-package="com.fixus.luxpol" />
<context:component-scan base-package="com.fixus.luxpol.bean" />
我已经检查了我的问题。我将方法从update更改为saveOrUpdate,它总是在数据库中创建新记录。我应该说我是通过表单发送这个对象的。我的意思是,我有一个带有对象属性的表单,并且我通过POST to方法发送它,在该方法中我调用了update(saveOrUpdate)方法
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="luxpolDataSource" />
<property name="annotatedClasses">
<list>
<value>com.fixus.luxpol.bean.House</value>
<value>com.fixus.luxpol.bean.Photo</value>
<value>com.fixus.luxpol.bean.Service</value>
<value>com.fixus.luxpol.bean.User</value>
<value>com.fixus.luxpol.bean.AccountRole</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<mvc:annotation-driven />
<context:component-scan base-package="com.fixus.luxpol" />
<context:component-scan base-package="com.fixus.luxpol.bean" />
我在logger中获取标题,因此对象被传递。我应该使用House对象的控制器来创建此对象的实例吗
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="luxpolDataSource" />
<property name="annotatedClasses">
<list>
<value>com.fixus.luxpol.bean.House</value>
<value>com.fixus.luxpol.bean.Photo</value>
<value>com.fixus.luxpol.bean.Service</value>
<value>com.fixus.luxpol.bean.User</value>
<value>com.fixus.luxpol.bean.AccountRole</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<mvc:annotation-driven />
<context:component-scan base-package="com.fixus.luxpol" />
<context:component-scan base-package="com.fixus.luxpol.bean" />
答复
好的,问题解决了。有时候我真是太笨了。我没有通过表单传递id,因此更新方法无法工作。抱歉占用您的时间您在更新任何实体时都会收到此消息吗?不会。我刚刚检查了不同的实体,它工作正常。我应该在此处配置事务管理器吗?我找不到问题所在。一个实体起作用,但该实体不希望:(
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="luxpolDataSource" />
<property name="annotatedClasses">
<list>
<value>com.fixus.luxpol.bean.House</value>
<value>com.fixus.luxpol.bean.Photo</value>
<value>com.fixus.luxpol.bean.Service</value>
<value>com.fixus.luxpol.bean.User</value>
<value>com.fixus.luxpol.bean.AccountRole</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<mvc:annotation-driven />
<context:component-scan base-package="com.fixus.luxpol" />
<context:component-scan base-package="com.fixus.luxpol.bean" />