hibernate3.2查询记录数 的相关问题

 

先贴出在struts的action中会调用hibernate的代码段

 

其中registerValidator方法就是后面要提到的hibernate查询记录操作,在另外一个类中出现

 

 

 

以下为registerValidator方法:

 

 

 

1.返回数据的转换。

 

数据需要注意,hibernate3.2以前,在HQL中使用count(*)返回的是int,而后随着JPA标准的改变,为了与JPA兼容,而改为返回Long

 

为了保证数据类型的转换成功,先统一转为Number型

 

这是一些比较有价值的参考:

 

1> “如果你从Hibernate 3.0.x/3.1.x升级到最新的3.2版,一定要注意,3.2版的很多sql函数如count(), sum()的唯一返回值已经从Integer变为Long,如果不升级代码,会得到一个ClassCastException。”

 

2> “因为无论是Long还是Integer,还是BigInteger,它们都是Number的子类,所以用Number去cast这个结果是肯定不会错的,然后,最好定义在Number里面这些方法可以统一的返回需要的类型;


 byte byteValue()  
  以 byte 形式返回指定的数值。  
abstract double doubleValue()  
  以 double 形式返回指定的数值。  
abstract float floatValue()  
  以 float 形式返回指定的数值。  
abstract int intValue()  
  以 int 形式返回指定的数值。  
abstract long longValue()  
  以 long 形式返回指定的数值。  
 short shortValue()  
  以 short 形式返回指定的数值。  


=====================================================
java.lang  
类 Number
java.lang.Object
  java.lang.Number
所有已实现的接口:  
Serializable  
直接已知子类:  

AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short  ”

 

2.java中long与Long有什么区别

 

Java的数据类型分两种:

1.基本类型:long,int,byte,float,double,char
2. 对象类型(类): Long,Integer,Byte,Float,Double,Char,String,其它一切java提供的,或者你自己创建的类。

其中Long又叫 long的包装类。而Byte和Float也类似,一般包装类的名字首写是数值名的大写开头。

什么叫包装类?
在java中有时候的运算必须是两个类对象之间进行的,不充许对象与数字之间进行运算。所以需要有一个对象,这个对象把数字进行了一下包装,这样这个对象就可以和另一个对象进行运算了。
比如我们也可以定义一个类:
class Long {
int i=0;
public Long (int i){
this.i=i;
}
}

这样这个Integer就是一个包装类,他包装了一个整数值,然后可以在里面写一些运算符重载的方法使它支持某些运算。这个时候可以赋值: 
Long it=new Long(10);
现在变量it就是一个对象,不是一个数字。

long 是长整型,在怎么长本身也是整型,12.10的整形部分是12,当然结果是12,

byte: 八位整数 -128——127,可用来节省内存的使用。
short: 16位整数 -32768——32,767,也比较省内存。
int: 32位整数 -2,147,483,648——2,147,483,647,一般来说整数都够用了
long: 64位整数 -9,223,372,036,854,775,808—— 9,223,372,036,854,775,807,一般不需要用
float: 32位浮点,如果浮点需要节省内存用这个。
Double: 64位浮点,一般非整数浮点可用这个。

但是要记住float和double都不是精确的,如果要储存钱一类的必须精确的,用java.math.BigDecimal

 


3.HQL占位符"?"使用的问题

 

之前我使用的是两个 ? 进行占位:

 

hql= "select count(*) FROM User WHERE ?=? ";

 

但发现使用出错,查看控制台输出:Hibernate: select count(*) as col_0_0_ from user user0_ where ?=?

 

觉得应该是占位符出了问题,后修改为一个?

 

hql= "select count(*) FROM User WHERE loginname=? ";

 

没有问题,查看控制台输出:Hibernate: select count(*) as col_0_0_ from user user0_ where user0_.loginname=?

 

问题就在 user0_.loginname上,hibernate使用别名,而自己使用?,是得不到别名.字段的,使用两个?本来是考虑降低其耦合性,不过细想,使用目前这样的方式同样达到效果,也就用一个?了,而若要用?占字段名这个暂时还没想到

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值