Hibernate getHibernateTemplate проблема при сохранении объекта внутри другого объекта - PullRequest
2 голосов
/ 26 июля 2010

Я недавно изменил свой код, чтобы сделать ссылку на 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 неправильно вставляется в параметры.

1 Ответ

0 голосов
/ 31 мая 2011

Trevor - это контекст вашего приложения.

</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="yourRootPackage" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>                
        </props>
    </property>
</bean>

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>


посмотрите выше, эта часть представляет собой минимум, необходимый в контексте вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...