Hibernate 返回 BigIntegers 而不是 longs

这是我的发件人实体

@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();

出现以下错误:

ERROR: org.hibernate.property.BasicPropertyAccessor - HHH000123: IllegalArgumentException in class: be.gimme.persistence.entities.Sender, setter method of property: senderIdId

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

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

我想知道在这种情况下,最佳实践是什么,我应该使用BigIntegers作为id(似乎有点过分)?

我应该手动将查询结果转换为类 Sender 的对象(这将是一个微不足道的)?或者我可以让Hibernate返回id而不是s吗?还是任何其他想法?longBigInteger

我正在使用Spring,Hibernate 4.1.1和MySQL


答案 1

休眠中“.list()”的默认值似乎是数字的 BigInteger 返回类型。以下是一个解决方法:

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

答案 2

在旧版本的Hibernate中,您可以使用

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

推荐