hibernate-HQL查询中类型转换的问题

问题描述

HQL查询中类型转换的问题

org.hibernate.QueryException: insertion type [org.hibernate.type.BigDecimalType@1d48c] and selection type [org.hibernate.type.DoubleType@293354] at position 2 are not compatible [insert into WsqSqbProfitReportEntity(openId,sqbType,**balanceProfit**,consumeProfit,profitDate,status) select u.openId,'01'**,round(u.userBalance*2.1/36000,2)**,round(u.userConsume*7.5/36000,2),sysdate,'1' from com.lefu.entity.sqb.WsqUserSqbInfoEntity u where u.endDate >= sysdate and u.sqbType = '01']
at org.hibernate.hql.internal.ast.tree.IntoClause.validateTypes(IntoClause.java:125)
at org.hibernate.hql.internal.ast.tree.InsertStatement.validate(InsertStatement.java:56)
at org.hibernate.hql.internal.ast.HqlSqlWalker.postProcessInsert(HqlSqlWalker.java:731)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.insertStatement(HqlSqlBaseWalker.java:497)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:259)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:101)
at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:80)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:119)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:215)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:193)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1649)
at com.lefu.dao.weixin.SqbDao.calculateSqbRate(SqbDao.java:64)
at com.lefu.service.impl.weixin.SqbServiceImpl.calculateSqbRate(SqbServiceImpl.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy85.calculateSqbRate(Unknown Source)
at com.lefu.autoTask.sqb.SqbAutoTask.calculateSqbRate(SqbAutoTask.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:64)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)


问题相当于向表WsqSqbProfitReportEntity中插入数据,其balanceProfit的类型为BigDecimal,但是,round(u.userBalance*2.1/36000,2)计算出的结果为double类型,导致插入出错,请问应该如何解决呢
谢谢大神指导

解决方案

用cast实现类型转换:
cast((round(u.userBalance*2.1/36000,2)) as BigDecimal)

解决方案二:

最后使用createSqlQuery的方式解决

时间: 2024-07-31 09:11:42

hibernate-HQL查询中类型转换的问题的相关文章

hibernate hql查询问题

问题描述 hibernate hql查询问题 遇到个hibernate hql查询的问题,求高手解答 实体类A包含实体类T属性,实体类T有两个子类T1,T2,代码如下: A{ T t; } T{ } T1 extends T{ } T2 extends T{ } 现在我要查询A,条件是T为T2的类型,HQL语句应该怎么写? 解决方案 除了Java类与属性的名称外,查询语句对大小写并不敏感. 所以 SeLeCT 与 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg

Hibernate HQL查询简介

传统的SQL语言采用的是结构化的查询方法,而这种方法对于查询以对象形式存在的数据却无能为力.幸运的是,Hibernate为我们提供了一种语法类似于SQL的语言,Hibernate查询语言(HQL),和SQL不同的是,HQL是一种面向对象的查询语言,它可以查询以对象形式存在的数据.因此,本文就HQL如何工作以及如何使用HQL展开了深入的讨论. SQL本身是非常强大的.当SQL的这种强大和处理面向对象数据的能力相结合时,就产生了HQL.和SQL一样,HQL提供了丰富的查询功能,如投影查询.聚合函数.

hibernate HQL new xxx() 查询 join连接多个表,并把连接后的表保存到一个新类中

hibernate HQL  new xxx() 查询 join连接多个表,并把连接后的表保存到一个新类中 另外  保存一些字段可以这样 select new com.zrj.entity.BankSelect(bankNum,bankName)from BankInfo as bank where 1=1

大神帮帮忙-ssh中2个表联合hql查询流程问题

问题描述 ssh中2个表联合hql查询流程问题 我的hql语句是用Guide 和UserGuide这两个表进行连接查询结果,执行hql后用Guide接收其返回值,那么我需要在Guide实体类中将UserGuide实体类做为属性引入,是不是这样的流程,还有没有其他要注意的.最好有一些代码让我参考参考. 解决方案 你这样也行. 你要做两表联查,也可以根据外键,来用hql语句查询到数据.其实查询数据有很多种方法,你觉得哪一种你熟悉,或者性能好,或者你感觉方便,你就可以 使用哪一种,看需求就行了.我推荐

第十一章 Hibernate的查询 HQL面向对象的查询语言

HQL基本上与sql语句在语法上相仿,只是HQL具有面向对象的特性而已.(本文部分内容是从网络中获取而来) 1. 大小写敏感性问题          除了Java类与属性的名称外,查询语句对大小写并不敏感.所以SeLeCT与sELEct以及SELECT 是相同的,但是org.hibernate.eg.FOO并不等价于org.hibernate.eg.Foo并且foo.barSet也不等价于foo.BARSET.         本文中的HQL关键字将使用小写字母.很多用户发现使用完全大写的关键字

hibernate-Hibernate一对多中,在多方的关联对象如果提供getter方法,hql查询不出结果的问题

问题描述 Hibernate一对多中,在多方的关联对象如果提供getter方法,hql查询不出结果的问题 entity @Entity @Table(name = "tb_many", catalog = "ecs") public class Many implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name="mid"

hibernate HQL 模糊查询 3种方式

hibernate HQL 模糊查询 3种方式以下是用 hibernate的HQL(面向对象的查询语言)实现模糊查询的3种方式,其中方式一是这三中方式中最理想的方式,至少方式一可以有效的防止由于查询条 件中需要参数的增多导致的代码长度太长出现代码折行的情况(代码太长会给后期的维护和测试带来很大的不便).但是还有比他更理想的方式,因为方式一在定义 strSQL时使用String ,这就势必会造成当变量过多时strSQL自身太长的问题.一个比较有效的改进办法就是将String 改进为StringBu

Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.java 1 package com.bie.po; 2 /** 3 * @author BieHongLi 4 * @version 创建时间:2017年3月8日 下午5:17:23 5 * 6 */ 7 public class User { 8 9 private int id; 10 priva

hibernate HQL能够使用数据库表字段进行查询?

问题描述 hibernate HQL能够使用数据库表字段进行查询? 解决方案 hibernate HQL能够使用数据库表字段进行查询?JAVA 怎样解决程序卡死, 内存爆满的问题?spring quartz在项目发布后无法...[