&引用;调用属性“”的setter时发生IllegalArgumentException;从SQLServerNumeric到java对象

&引用;调用属性“”的setter时发生IllegalArgumentException;从SQLServerNumeric到java对象,java,sql-server,hibernate,Java,Sql Server,Hibernate,我已经有这样一个错误,当你试图执行不适当的匹配(日期到布尔值,等等),我已经能够很容易地修复 但这一次,我很困惑,因为hibernate拒绝将“数字”Id与Java“长”Id相匹配(当setter用于Double、Integer、Float、String、int、Long等时,它也失败了) sql server字段“id”是一个数字(19,0) 我的DTO是: @XmlRootElement @XmlAccessorType(XmlAccessType.PROPERTY) public clas

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

但这一次,我很困惑,因为hibernate拒绝将“数字”Id与Java“长”Id相匹配(当setter用于Double、Integer、Float、String、int、Long等时,它也失败了)

sql server字段“id”是一个数字(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;
}
}
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]
我的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>
我真的很困惑,所以欢迎任何帮助


感谢您一直阅读到这里。

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

    .addScalar("id", new LongType())
    .addScalar("name", new StringType())

数据库查询中的数字不是长的,而是大整数

将setter更改为:

public void setId(final Number id) {
    this.id = id != null ? id.longValue() : null;
}

这就成功了:太好了,非常感谢。尽管如此,我不确定是否理解;我做了很多次这样的查询,没有添加“type”。为什么我现在必须指定它?请求的表之一实际上是一个视图。这可能是原因吗?