"从调用setter for property"时出现"IllegalArgumentException",从sqlserver numeric到java对象

Mar*_*vin 2 java sql-server hibernate

我已经有这样的错误,当你尝试执行不合适的匹配(日期到布尔,等等),我已经能够很容易地修复.

但是这一次,我很困惑,因为hibernate拒绝将"数字"Id与Java"Long"相匹配(并且当为Double,Integer,Float,String,int,long等设置setter时它也失败了)

sql-server字段"id"是一个NUMERIC(19,0)

我的DTO是:

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class DtoResult {

private Long id;
private String name;
// ...


public Long getId() {
    return id;
}
public void setId(final Long id) {
    this.id = id;
}   
public String getName() {
    return name;
}
public void setName(final String name) {
    this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)

我的hibernate查询:

    final SQLQuery query= getCurrentSession().createSQLQuery(select + from + where);

    query.setParameter("manyFields", manyFields);
        query
        .addScalar("id")
        .addScalar("name")
        .setResultTransformer(Transformers.aliasToBean(DtoResult.class));

    return query.list(); // List<DtoResult>
Run Code Online (Sandbox Code Playgroud)

错误:

IllegalArgumentException  occurred while calling setter for property [com.some.thing.DtoResult.id (expected type = java.lang.Long)]; target = [com.some.thing.DtoResult@77a70b79], property value = [269895]
Run Code Online (Sandbox Code Playgroud)

我真的对此感到困惑,因此欢迎任何帮助.

感谢您的阅读,直到那里.

K13*_*139 8

只需添加预期类型,例如:

    .addScalar("id", new LongType())
    .addScalar("name", new StringType())
Run Code Online (Sandbox Code Playgroud)

  • 这就是诀窍:太棒了,非常感谢.虽然,我不确定是不是; 我多次做了这样的查询,没有添加"类型".为什么我现在必须指定它?其中一个请求的表是一个VIEW.可能是原因? (2认同)