我在数据库中有两个Integer
列(derby和db2)。我需要在JPQL
内将它们相互分开。
如果余数是十进制数,则Integer
类型的两列都返回零,例如0.25
变为0
等等,因为类型为int,这是可以理解的。
在SQL
我可以举例如
select CAST(column1 as decimal(6,2))/CAST(column2 as decimal(6,2))from Sometable;
但是JPQL
等价物。
一个选项可能是(我还没有尝试)是在实体中有一个@Transient
方法返回Decimal类型并在那里进行计算并将其传递给JPQL
但是我宁愿让它SQL
做这项工作。
Mysql不需要在数据库级别进行转换。所以不同RDBMS的行为是不同的,这很好。但是,JPQL应该如何处理需要使用本机查询才能知道此操作需要强制转换为十进制。
添加方言<property name="openjpa.jdbc.DBDictionary" value="derby"/>
也没有修复它。
请注意它是JPA1
答案 0 :(得分:5)
除法运算符对整数参数执行整数除法是一个特征。在MySQL中,您必须明确选择div
进行整数除法,/
进行浮点除法,而在JPQL中,选择是自动进行的,就像在Java中一样。
所以我建议:
select (column1 * 1.0) / column2 from Sometable;
答案 1 :(得分:4)
你基本上有三种选择。
答案 2 :(得分:3)
AFAIK没有办法在JPQL中进行这种演员。
我建议使用JPA的本机查询执行,它允许您像使用JDBC一样运行SQL查询。
例如:
Query query = em.createNativeQuery("select CAST(column1 as decimal(6,2))/CAST(column2 as decimal(6,2)) from Sometable");
Double result = (Double) query.getSingleResult();
或
List<Double> results = (List<Double>) query.getResultList();