““为属性调用设置方法时发生IllegalArgumentException”从sqlserver数值转换为Java对象

问题描述 投票:2回答:2

[当您尝试执行不正确的匹配(日期到布尔值等等)时,我已经出现了这样的错误,而我已经能够很容易地修复它。

但是这一次,我很困惑,因为休眠状态拒绝将“数字” ID与Java“长”匹配(并且在为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;
}
}

我的休眠查询:

    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>

错误:

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]

我对此感到非常困惑,因此欢迎您提供任何帮助。

感谢您在那里阅读。

java sql-server hibernate
2个回答
8
投票

只需添加期望的类型,例如:

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

0
投票

数据库查询中的数字不是Long,而是BigInteger。

将设置器更改为:

public void setId(final Number id) {
    this.id = id != null ? id.longValue() : null;
}
© www.soinside.com 2019 - 2024. All rights reserved.