我有一个Hibernate类:
@lombok.Data
public class RedshiftRecord {
@Column(name = "ID")
private Long id;
}
Redshift / postgres中此列的相应类型是BIGINT,这是SQL源代码:
CREATE TABLE SAMPLE
(
id bigint distkey sortkey
);
BIGINT是一个带符号的八字节整数。但是,当我尝试运行此代码时:
SQLQuery query = getSession().createSQLQuery("SELECT id FROM sample LIMIT 1");
query.setResultTransformer(Transformers.aliasToBean(RedshiftRecord.class));
RedshiftRecord record = (RedshiftRecord) query.uniqueResult();
我收到此错误
org.hibernate.property.BasicPropertyAccessor: IllegalArgumentException in class: com.org.model.RedshiftRecord, setter method of property: id
org.hibernate.property.BasicPropertyAccessor: expected type: java.lang.Long, actual value: java.math.BigInteger
如果我像这样改变身份证:
private BigInteger id;
然后它工作正常。有没有办法让Hibernate从Redshift / postgres BIGINT转换为Java Long? BIGINT的定义似乎更接近Java Long而不是Java BigIntger
我不想使用BigIntegers来节省运行时/空间。
答案 0 :(得分:0)
我在我的模型类上使用了@Entity Annotation并替换了
query.setResultTransformer(Transformers.aliasToBean(RedshiftRecord.class));
带
query.addEntity(RedshiftRecord.class);
这允许我自动将BIGINTS投射到Longs。