我有关于
spring-data的DAO实现:
public interface TestDataRepository extends CrudRepository<DpConfigData,Long> { @Query(value = "select distinct(oid) from unit",nativeQuery = true) List<Long> testMethod(); }
和单元测试来测试被管理的DAO:
@Test public void test(){ List<Long> testData = dpConfigDataEntityDataRepository.testMethod(); for (Long oid:testData){ System.out.print(oid); } }
运行测试给出奇怪的结果 – List< Long>运行时的testData由BigInteger实例填充,而不是由Long填充.结果我得到ClassCastException:java.math.BigInteger无法强制转换为java.lang.Long
JPA实现 – Hibernate.
作为DB我使用Postgresql,unit.oid字段在DB层上有BigInt类型.
在获取整个单元的情况下它被映射到Long,但是使用自定义查询作为“select distinct …”时出现了错误并且它被映射到BigInteger.
这是Spring数据JPA的一个问题.
如果在DB中数据类型定义为BigInteger,并且在JPA查询中我们尝试获取为Long,则它不会给出任何错误,但它在Long数据类型中将值设置为BigInteger.
如果在DB中数据类型定义为BigInteger,并且在JPA查询中我们尝试获取为Long,则它不会给出任何错误,但它在Long数据类型中将值设置为BigInteger.
解决方案:
>使用BigInteger作为返回类型
@Query(value =“从单元中选择distinct(oid)”,nativeQuery = true)
列表与LT; BigInteger的>测试方法();
然后将变量设置如下.
Long variable = bigIntegerValue.longValue();
>使用String作为返回类型并转换为Long
@Query(value =“从单元中选择distinct(oid)”,nativeQuery = true)
列表与LT;字符串>测试方法();
然后将值设置为
Long variable = Long.valueOf(stringValue);
>将DB列类型更改为Integer / Number.
>从实体对象中获取值.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。