hibernate返回BigDecimal数据类型而不是long

Vic*_*tor 7 hibernate bigdecimal long-integer

hibernate命名查询返回数据类型为NUMBER的列的BigDecimal.

select col1 as "col1" from table1 union select col2 as "col1" from table2
Run Code Online (Sandbox Code Playgroud)

在客户端,我希望col1的数据类型是long(原始)我这样做:

<return-scalar column="col1" type="java.lang.Long" />
Run Code Online (Sandbox Code Playgroud)

要么

<return-scalar column="col1" type="long" />
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我得到:

java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.Long
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我怀疑,别名有什么问题?

dse*_*ert 5

默认情况下,Oracle NUMBER映射到Hibernate中的BigDecimal。尝试将类型设置为BigDecimal。


Dav*_*ten 5

我不知道您的休眠配置有什么问题,但是作为一种变通办法,一种使您不必关心Number休眠查询返回的Java 类型的技巧是将返回的值转换为Number并调用.longValue()

long id = ((Number) em.createNativeQuery("select my_seq.nextVal from dual")
              .getSingleResult())
          .longValue();
Run Code Online (Sandbox Code Playgroud)

如果查询返回你不关心这样的话LongBigDecimalBigIntegerShort只要它适合到Java long