gpt4 book ai didi

java - 在 hibernate 状态下用新的集合更新旧的集合

转载 作者:行者123 更新时间:2023-11-30 00:19:38 26 4
gpt4 key购买 nike

我在 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 异常。

尝试添加新对象或删除旧对象时没有任何问题。

但是当我尝试更新对象时:

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);
}

感谢您的关注,感谢您的帮助。

最佳答案

问题很明显。我使用了级联=“保存更新”。将其更改为cascade="all"解决了我的问题。

关于java - 在 hibernate 状态下用新的集合更新旧的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23339226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com