在休眠状态下使用新的Set更新旧Set

时间:2014-04-28 10:54:21

标签: java mysql hibernate

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

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

1 个答案:

答案 0 :(得分:0)

问题非常明显。我使用了cascade =&#34; save-update&#34;。将其更改为级联=&#34;所有&#34; 解决了我的问题。