Я создаю весеннее веб-приложение с 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" />
Так что это мой конфиг. Когда я хочу обновить объект, я получаю это
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)
---- ОБНОВЛЕНИЕ
Я кое-что проверил с моей проблемой. Я изменил метод с update на saveOrUpdate, и он всегда создает новую запись в БД. Я должен сказать, что я отправляю этот объект через форму. Я имею в виду, что у меня есть форма со свойствами объекта, и я отправляю ее через метод 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 для создания экземпляра этого?
ОТВЕТ
Хорошо, проблема была решена. Иногда я такой тупой. Я не передавал идентификатор через форму, поэтому метод обновления не мог работать. Извините за ваше время