hibernate returning BigInteger instead of Long(hibernate返回java类型为BigInteger)

问题描述

场景: mysql数据库定义数据类型为bigInt, hibernate映射文件中定义类型为Long,通过hibernate查询出来的确实java.math.BigInteger private Long id;private Long projectId;private Long orgRoleId; <id name="id" type="java.lang.Long"> <column name="id" /> <generator class="identity" /> </id> <property name="projectId" type="java.lang.Long"> <column name="projectId" not-null="true" /> </property> <property name="orgRoleId" type="java.lang.Long"> <column name="orgRoleId" not-null="true" /> </property>数据库定义类型为bigInt, Mysql数据库查询:List<Map<String, Object>> list = this.hibernateTemplate.execute(new HibernateCallback<List<Map<String, Object>>>() {public List<Map<String, Object>> doInHibernate(Session session) throws HibernateException,SQLException {List find = null;String sql = "select t1.* ,t2.portalItemId as itemId ,t2._column ,t2._row ,t2._order ,t2.orgRoleId ,t2.projectId, t2.workZoneSiteId ,t2.portalItemHeight,t2.portalItemWidth from portal_item as t1,portal_default_workzonesite_item as t2 where t1.status=1 and t1.id=t2.portalItemId and t2.workZoneSiteId='"+ workZoneSiteId + "'";SQLQuery query = session.createSQLQuery(sql);query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);find = query.list();return find;}});在得到的list拿出相应原本以为Long类型数据进行Long型转换时抛出Exception:ClassCastException: cannot cast java.math.BigInteger to java.lang.Long请问有人遇到过这情况吗,请问发生这种不预期的异常原因在哪?谢谢 问题补充: @Testpublic void getUserPersonalWorkZonesUnderProject() {List<Map<String, Object>> list = workZoneService.getUserPersonalWorkZonesUnderProject(projectId, userId);if(list!=null){for (Map<String, Object> map : list) {Set<String> keys = map.keySet();for (String key : keys) {log.info("key="+key+", value.class="+map.get(key).getClass());}}}logInfo(list);}这是我针对上面hibernate查询写的test,结果如下:[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=title, value.class=class java.lang.String[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=visible, value.class=class java.lang.Integer[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=status, value.class=class java.lang.Integer[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=userId, value.class=class java.lang.String[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=_order, value.class=class java.lang.Integer[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=projectId, value.class=class java.math.BigInteger[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=workZoneId, value.class=class java.math.BigInteger[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=zoneName, value.class=class java.lang.String

解决方案

你的配置和使用都没问题。1、用的是hibernate哪个版本?2、把异常和代码贴全 (workZoneSiteId 是什么类型?)
解决方案二:
BigInteger的分析其实涉及很多内容,网上都不怎么全面,找了半天,感觉这个系列的教程讲解的还是最详细的:http://swiftlet.net/archives/tag/java-biginteger
解决方案三:
我好像错了,如果你用的是mysql的话,java.lang.Long改为java.math.BigDecimal试试请看以下网址的Table 20.24http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-type-conversions.html
解决方案四:
<id name="id" type="java.lang.Long">应该是java.lang.long吧

时间: 2024-09-28 00:38:38

hibernate returning BigInteger instead of Long(hibernate返回java类型为BigInteger)的相关文章

Hibernate 中get()和load()与Hibernate简介

hibernate 中get()和load()与hibernate简介 session先判断对象是否存在,如果存在就不到数据库教程中检索.返回的对象都位于session缓存中,接下来修改了持久化对象的属性后,当session清理缓存时,会根据持久化对象的属性变化来同步更新数据库.     区别:    (1)当数据库中不存在与oid对应的记录时,load()方法抛出objectnotfoundexception异常,而get()方法返回null.    (2)两者采用不同的检索策略.     

【HIBERNATE框架开发之三】搭建HIBERNATE日志(SLF4J转LOG4J)环境并搭建JUNIT单元测试环境!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/806.html 由于最新写cocos2dx动作编辑器的解析和框架所以没更新,那么从今天开始继续来学习Hibernate,那么接着第二篇文章讲解,那么首先copy,第二篇的第一个Annotation的项目改个名字"LogForHibernate":           首先搭建log4j环境: 第一步我们之前设置

Java的Hibernate框架数据库操作中锁的使用和查询类型_java

 Hibernate与数据库锁 一.为什么要使用锁? 要想弄清楚锁机制存在的原因,首先要了解事务的概念. 事务是对数据库一系列相关的操作,它必须具备ACID特征: A(原子性):要么全部成功,要么全部撤销. C(一致性):要保持数据库的一致性. I(隔离性):不同事务操作相同数据时,要有各自的数据空间. D(持久性):一旦事务成功结束,它对数据库所做的更新必须永久保持. 我们常用的关系型数据库RDBMS实现了事务的这些特性.其中,原子性. 一致性和持久性都是采用日志来保证的.而隔离性就是由今天我

【hibernate】主键生成策略使用UUID报出如下警告:org.hibernate.id.UUIDHexGenerator - HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC

主键生成策略使用UUID报出如警告如下: 控制台- 2017-11-24 18:40:14 [restartedMain] WARN org.hibernate.id.UUIDHexGenerator - HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC 4122 compliant UUID values; consider using org.hibernate.id.UUI

Java中的BigInteger

复制的API上的文档,BigInteger对付一般的高精度没有问题. java.math 类 BigInteger java.lang.Object java.lang.Number java.math.BigInteger 所有已实现的接口: Serializable, Comparable<BigInteger> public class BigInteger extends Number implements Comparable<BigInteger> 不可变的任意精度的整

instrumentation-关于返回参数类型 Motionevent

问题描述 关于返回参数类型 Motionevent public boolean TouchEvent(MotionEvent event); //这个是自己写的接口的方法 然后在try { Instrumentation instrumentation=new Instrumentation(); instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMi

jni-JNI 返回 jbytearray类型

问题描述 JNI 返回 jbytearray类型 JNIEXPORT jint JNICALL Java_com_serial_android_serialnative_jni_serial_read(JNIEnv *env, jobject obj , jint fd, jbyteArray buffer, jint size, jint rcv_wait){ // LOGD("serial_read"); // char buf[256]; // char savedata[256

javascript-JavaScript数组值去重,但是返回的类型和原类型不一样, 怎么转换

问题描述 JavaScript数组值去重,但是返回的类型和原类型不一样, 怎么转换 var arr = [2,1,2,10,2,3,4,1,85,321,3,4,65,10,24]; function uniq(newarr){ function toObject(arr) { var obj = { }; for(var i=0 ;i<arr.length ;i++){ obj[ arr[ i ] ]=true; } return obj ; } function keys(obj){ var

asp.net-在ASP.net中获取Html元素如何并返回Json类型

问题描述 在ASP.net中获取Html元素如何并返回Json类型 在ASP.net中获取Html元素如何并返回Json类型 并且获得Html的所有元素 解决方案 asp.net webservice返回json 解决方案二: 使用page.controlshttp://www.jb51.net/article/16536.htm