我最近更改了我的代码以引用 getHibernateTemplate(),现在我的表单似乎无法正确保存,这是代码:
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”设置为空(我的数据库中的一个约束)...以前我使用这种方法:
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()。
这是我的表单和未能填充的 user_id 之间的关联:
<id name="id">
<generator class="native"/>
</id>
...
...
<many-to-one column="user_id" name="user" not-null="false"/>
在这两种情况下生成的 SQL 语句是相同的,只是 user_id 没有正确插入到参数中。
最佳答案
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>
看上面,这部分代表您的应用程序上下文中所需的最低限度。
关于java - 将对象保存在另一个对象中时出现 Hibernate getHibernateTemplate 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331311/