指定 Hibernate 的 aliasToBean 使用的 setter

Specifying the setters to be used by Hibernate's aliasToBean

我正在使用 aliasToBean 将标准结果集转换为我的自定义 DTO;

criteria.setResultTransformer(Transformers.aliasToBean(CustomEntity.class));

属性之一; id 作为整数返回。

我有以下两个 setter:

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

所以变压器选错了setter。

问:有什么办法可以告诉transformer使用哪个setter?

不,您的自定义 DTO 应该具有 JavaBeans 中定义的 setter 但是您可以添加其他方法来操作字段,但是 Hibernate 需要适当的 setters.

但我通常更喜欢手动获取结果,例如通过 query.list() which returns a List<Object[]> 并通过从列表中提取来构建 DTO。