Я использую 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);
}
}
Как видно из закомментированного кода, я попытался вручную установить идентификатор объекта (имя в данном случае) из запроса. Однако 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;
}