Tri*_*cke 14 java spring hibernate biginteger long-integer
这是我的发件人实体
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试执行以下查询时:
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();
Run Code Online (Sandbox Code Playgroud)
发生以下错误:
错误: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返回longid而不是BigIntegers?还是其他任何想法?
我正在使用Spring,Hibernate 4.1.1和MySQL
rog*_*ack 27
hibernate中".list()"的默认值似乎是Numeric的BigInteger返回类型.这是一个解决方法:
session.createSQLQuery("select column as num from table")
.addScalar("num", StandardBasicTypes.LONG).list();
Run Code Online (Sandbox Code Playgroud)
小智 6
添加 #Hedley 注释以全局修复它,您可以在 SQLDialect 构造函数中添加一行。在我的项目中它是这样的:
public PostgreSQLDialect() {
super();
registerHibernateType(Types.BIGINT, StandardBasicTypes.LONG.getName());
}
Run Code Online (Sandbox Code Playgroud)
在旧版本的Hibernate中,您可以使用
session.createSQLQuery("select column as num from table")
.addScalar("num", Hibernate.LONG).list();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22494 次 |
| 最近记录: |