这是我的发送者实体
@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:在类be.gimme.persistence.entities.Sender中,属性senderId的setter方法发生了IllegalArgumentException异常
ERROR: org.hibernate.property.BasicPropertyAccessor - HHH000091:期望类型为long,实际值为java.math.BigInteger
这是因为类Sender中的senderId实际上是一个long而不是Hibernate返回的BigInteger。
我想知道在这种情况下最佳实践是什么,我应该使用BigIntegers作为id(似乎有些过度设计)?
我应该手动将查询结果转换为Sender类的对象吗(这将很遗憾)?还是我可以让Hibernate返回long
id而不是BigInteger
?或者有其他任何想法?
我正在使用Spring、Hibernate 4.1.1和MySQL。