gpt4 book ai didi

java - Hibernate 返回 BigIntegers 而不是 longs

转载 作者:IT老高 更新时间:2023-10-28 13:47:46 24 4
gpt4 key购买 nike

这是我的发件人实体

@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: senderId

ERROR: org.hibernate.property.BasicPropertyAccessor - HHH000091: Expected type: long, actual value: java.math.BigInteger

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

我想知道在这种情况下最佳做法是什么,我是否应该使用 BigIntegers 作为 id(似乎有点矫枉过正)?

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

我正在使用 Spring、Hibernate 4.1.1 和 MySQL

最佳答案

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

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

关于java - Hibernate 返回 BigIntegers 而不是 longs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18758347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com