我正在用hibernate构建一个spring web应用程序。我不知道为什么,但我不能更新我的对象。在我的配置下面
<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" />
所以这是我的配置。当我想更新一个对象时,我得到了这个
ERROR: org.hibernate.jdbc.AbstractBatcher - Exception executing batch:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:85)
at ...
ERROR: org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:85)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:70)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:90)...
我使用update(Object obj)方法用hibernate模板更新
----更新
我已经检查过我的问题。我已经将方法从更新更改为saveOrUpdate,并且它始终在db中创建新记录。我应该说我通过表单发送这个对象。我的意思是我有一个带有对象属性的表单,我通过POST将它发送到我调用update(saveOrUpdate)方法的方法。
@RequestMapping(value = "/admin/house/update", method = RequestMethod.POST)
public String updateHouse(House house, Model model) {
model.addAttribute("step", 3);
this.houseDao.update(house);
logger.info("test: " + house.getTitle());
return "houseAdmin";
}
我在记录器中获取标题,因此传递了对象。我应该使用House对象的控制器来创建它的实例吗?
好的问题解决了。我有时候这么傻。我没有通过表单传递id,因此更新方法无法正常工作。抱歉你的时间