&引用;调用属性“”的setter时发生IllegalArgumentException;从SQLServerNumeric到java对象
我已经有这样一个错误,当你试图执行不适当的匹配(日期到布尔值,等等),我已经能够很容易地修复 但这一次,我很困惑,因为hibernate拒绝将“数字”Id与Java“长”Id相匹配(当setter用于Double、Integer、Float、String、int、Long等时,它也失败了) sql server字段“id”是一个数字(19,0) 我的DTO是:&引用;调用属性“”的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
@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”。为什么我现在必须指定它?请求的表之一实际上是一个视图。这可能是原因吗?