Hibernate返回BigIntegers而不是long

这是我的发件人实体

@Entity public class Sender { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long senderId; ... ... public long getSenderId() { return senderId; } public void setSenderId(long senderId) { this.senderId = senderId; } } 

当我尝试执行以下查询时:

 StringBuilder query = new StringBuilder(); query.append("Select sender.* "); query.append("From sender "); query.append("INNER JOIN coupledsender_subscriber "); query.append("ON coupledsender_subscriber.Sender_senderId = sender.SenderId "); query.append("WHERE coupledsender_subscriber.Subscriber_subscriberId = ? "); SQLQuery q = (SQLQuery) sessionFactory.getCurrentSession().createSQLQuery(query.toString()); q.setResultTransformer(Transformers.aliasToBean(Sender.class)); q.setLong(0, subscriberId); return q.list(); 

发生以下错误:

错误:org.hibernate.property.BasicPropertyAccessor – HHH000123:类中的IllegalArgumentException:be.gimme.persistence.entities.Sender,属性的setter方法:senderId

错误:org.hibernate.property.BasicPropertyAccessor – HHH000091:预期类型:long,实际值:java.math.BigInteger

发生这种情况是因为Sender类中的senderId实际上是一个long而不是BigInteger(由Hibernate返回)。

我想知道在这样的情况下最佳做法是什么,我应该使用BigIntegers作为id(看起来有点矫枉过正)?

我应该手动将查询结果转换为类Sender的对象(那会很糟糕)? 或者我可以让Hibernate返回long id而不是BigInteger s? 还是其他任何想法?

我正在使用Spring,Hibernate 4.1.1和MySQL

hibernate中“.list()”的默认值似乎是Numeric的BigInteger返回类型。 这是一个解决方法:

 session.createSQLQuery("select column as num from table") .addScalar("num", StandardBasicTypes.LONG).list(); 

对象数据库映射是错误的。 这里有一个转换exception,说数据库字段是BigInteger ,但是对象属性很long

BigInteger是一个保存无限大小整数值的特殊类。 此外, BigInteger无法隐式转换为长期。

为避免此错误, BigInteger数据库字段应更改为long兼容类型。 将其更改为int类型,其中int可以隐式地转换为long 。 见BigInteger 。

在旧版本的Hibernate中你可以使用

  session.createSQLQuery("select column as num from table") .addScalar("num", Hibernate.LONG).list(); 

你可以查看以下链接检查BigInteger身份生成器类