Я использую Spring MVC 2.5 и пытаюсь получить объект формы JSTL для загрузки из запроса GET. Я использую Hibernate POJO в качестве объектов поддержки.
В запросе есть одна страница, указывающая на другую страницу с идентификатором класса (первичным ключом строки). Запрос выглядит как "newpage.htm? Name = RowId". Это идет на страницу с объектом поддержки формы,
Новая страница выше загружает поля объекта в редактируемые поля, заполненные существующими значениями строки. Идея состоит в том, что вы должны иметь возможность редактировать эти поля и затем сохранять их обратно в базу данных.
Вид этой страницы выглядит примерно так
<form:form commandName="thingie">
<span>Name:</span>
<span><form:input path="name" /></span>
<br/>
<span>Scheme:</span>
<span><form:input path="scheme" /></span>
<br/>
<span>Url:</span>
<span><form:input path="url" /></span>
<br/>
<span>Enabled:</span>
<span><form:checkbox path="enabled"/></span>
<br/>
<input type="submit" value="Save Changes" />
</form:form>
Контроллер содержит это,
public class thingieDetailController extends SimpleFormController {
public thingieDetailController() {
setCommandClass(Thingie.class);
setCommandName("thingie");
}
@Override
protected Object formBackingObject(HttpServletRequest request) throws Exception {
Thingie thingieForm = (Thingie) super.formBackingObject(request);
//This output is always null, as the ID is not being set properly
logger.debug("thingieForm.getName(): [" + thingieForm.getName() + "]");
//thingieForm.setName(request.getParameter("name"));
SimpleDAO.loadThingie(thingieForm);
return thingieForm;
}
@Override
protected void doSubmitAction(Object command) throws Exception {
Thingie thingie = (Thingie) command;
SimpleDAO.saveThingie(thingie);
}
}
Как видно из прокомментированного кода, я попытался вручную установить идентификатор объекта (в данном случае это name) из запроса. Однако Hibernate жалуется на десинхронизацию объекта, когда я пытаюсь сохранить данные в форме.
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
Эта ошибка, похоже, что-то делает для всего сеанса, который перестает работать для всего моего веб-приложения, постоянно выкидывая исключение состояния устаревшего объекта, как показано выше.
Если кто-нибудь, знакомый с Spring MVC, может помочь мне с этим или предложить обходной путь, я был бы очень признателен.
EDIT:
Заводской код сеанса.
private static final SessionFactory sessionFactory;
private static final Configuration configuration = new Configuration().configure();
static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}