我正在使用aliasToBean
将Criteria结果集转换为我的自定义DTO;
criteria.setResultTransformer(Transformers.aliasToBean(CustomEntity.class));
其中一个属性; id
以整数形式返回。
我有以下两个二传手:
public void setId(Integer Id) {
this.uitId = String.valueOf(Id);
}
public void setId(String Id) {
this.uitId = Id;
}
我得到以下例外:
10:43:30.009 [main] ERROR org.hibernate.property.BasicPropertyAccessor - IllegalArgumentException in class: com.package.example.CustomEntity, setter method of property: Id
10:43:30.011 [main] ERROR org.hibernate.property.BasicPropertyAccessor - expected type: java.lang.String, actual value: java.lang.Integer
所以变压器选错了。
答案 0 :(得分:1)
不,您的自定义DTO应该具有JavaBeans中定义的setter 但是你可以添加其他方法来操作字段,但是Hibernate需要适当的setter。
但我通常更喜欢手动获取结果,例如通过query.list()
返回List<Object[]>
并通过提取列表来构建DTO。