Я недавно изменил свой код, чтобы сделать ссылку на getHibernateTemplate (), и теперь мои формы, похоже, не сохраняются правильно, вот код:
<code>
public void saveForm(EcoFormFill form, int userId)
throws RemoteException
{
User tmpUser = (User)getHibernateTemplate().load(User.class, new Integer(userId));
form.setUser(tmpUser);
getHibernateTemplate().saveOrUpdate(form);
}
Он жалуется, что не может установить 'user_id' равным нулю (ограничение в моей БД) ... Ранее я использовал такой подход:
<code>
public void saveForm(EcoFormFill form, int userId)
throws RemoteException
{
Session ses = getHibernateTemplate().getSessionFactory().openSession();
try
{
User tmpUser = (User) ses.load(User.class, new Integer(userId));
form.setUser(tmpUser);
ses.saveOrUpdate(form);
}
catch (Exception e)
{
log.error(e.getMessage(), e);
throw new RemoteException(e.getMessage());
}
finally
{
ses.flush();
ses.close();
}
}
И этот подход работает просто отлично, но он огорчает меня модульными тестами, поэтому мне нужно использовать предыдущий подход с getHibernateTemplate ().
Вот связь между моей формой и идентификатором пользователя, который не заполняется:
<id name="id">
<generator class="native"/>
</id>
...
...
<many-to-one column="user_id" name="user" not-null="false"/>
Операторы SQL, сгенерированные в обоих случаях, идентичны, за исключением того факта, что user_id неправильно вставляется в параметры.