我对hibernate更新对象有一些问题:
public class SearchType implements Serializable{
private static final long serialVersionUID = -7909889858492050282L;
private Integer id;
private String name;
private Set<SearchTypeParameters> parameters = new HashSet<SearchTypeParameters>();
public SearchType() {}
public SearchType(SearchTypeDTO typeDto) {
id = typeDto.getId();
name = typeDto.getName();
Set<SearchTypeParametersDTO> parametersDTOs = typeDto.getParameters();
Set<SearchTypeParameters> parameters = new HashSet<SearchTypeParameters>(parametersDTOs.size());
for (SearchTypeParametersDTO parameterDTO : parametersDTOs) {
parameters.add(new SearchTypeParameters(parameterDTO));
}
this.parameters = parameters;
}
//getters and setters
}
public class SearchTypeParameters implements Serializable{
private static final long serialVersionUID = -7312128186599122114L;
private int parameterId;
private String searchCriteria;
private String value;
private SearchType type;
public SearchTypeParameters() {}
public SearchTypeParameters(SearchTypeParametersDTO searchParametersDto) {
parameterId = searchParametersDto.getParameterId();
searchCriteria = searchParametersDto.getSearchCriteria();
value = searchParametersDto.getValue();
}
//getters and setters
}
DTO类用于通过PersistentSet的序列化来阻止GWT ecxeption。
尝试添加新对象或删除旧对象时没有问题。
但是当我尝试更新对象时:
public void updateSearchType(SearchTypeDTO typeDto) throws GwtException {
try {
CommonConfig.getBean(SearchTypeDao.class).deleteSearchTypeParameters(typeDto.getId());
SearchType type = new SearchType(typeDto);
for (SearchTypeParameters parameter : type.getParameters()) {
parameter.setSearchType(type);
}
CommonConfig.getBean(SearchTypeDao.class).updateSearchType(type);
} catch (Exception e) {
log.error(e, e);
throw new GwtException(e.getMessage());
}
}
SearchTypeParameters的旧记录通常会被删除,但是当它创建新记录时,只会填充带有ID的字段,searchCriteria和value字段将填充空值。我检查了要更新的Set<SearchTypeParameters>
是否填充了正确的值。
这是更新方法:
public void updateSearchType(SearchType type) throws Exception {
Object merge = getCurrentSession().merge(type);
getCurrentSession().saveOrUpdate(merge);
}
感谢您的关注,感谢您的帮助。
答案 0 :(得分:0)
问题非常明显。我使用了cascade =&#34; save-update&#34;。将其更改为级联=&#34;所有&#34; 解决了我的问题。