【发布时间】:2012-08-31 10:58:58
【问题描述】:
我有以下对象(简化)作为 JavaBean:
public class Person {
private Integer id;
private City cityOfBirth;
private City city;
// ...
}
在我的春季表格中,我有 2 个选择组合来选择两个城市,如下所示:
<form:form method="post" action="" commandName="person">
City of birth: <form:select path="cityOfBirth" items="${ cities }" itemValue="id" />
City: <form:select path="city" items="${ cities }" itemValue="id" />
...
</form:form>
我的 City 类的 PropertyEditor 将简单地调用我的 CityDao 的 get,如下:
@Component
public class CityDaoImpl implements CityDao {
private @Autowired HibernateTemplate hibernateTemplate;
public City get (Integer id) {
return (City) hibernateTemplate.get(City.class, id);
}
}
我的 PersonDao 会这样做以保存实例:
public void save (Person person) {
hibernateTemplate.saveOrUpdate (person);
}
当我尝试用 2 个不同的城市保存一个人时,一切正常,但是当我选择同一个城市时,我收到以下错误:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.project.si.models.common.City#90]
我在其他帖子中读到,发生这种情况是因为 Hibernate Session 当前知道在 propertyEditor 调用 cityDao.get(id) 时获得的先前 City,所以我应该在某处使用 merge(),但我没有得到我应该在哪里应用这个..
【问题讨论】:
-
City 字段为什么有
path="cityOfBirth"?那是错字吗?不应该是path="city"吗? -
你是正确的@limc,这是一个错字,我已经编辑了我的问题.. 谢谢
标签: spring hibernate spring-mvc