首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate不能load()跟get())

2012-09-07 
Hibernate不能load()和get())http://gwh-08.iteye.com/blog/768364今天才搞明白,数据类型与this.getSessio

Hibernate不能load()和get())
http://gwh-08.iteye.com/blog/768364

   今天才搞明白,数据类型与this.getSession().get(BusinessType.class, businessId);这个主键Id的字段类型相关,直接关系到你是否能很好的利用Hibernate的save(),delete(),updte()方法。
下面举个例子::
   Hibernate给我们开了一个巨大的玩笑,一个弥天大谎。。
    在我反思不得其解的时候,我发现  oracle数据库的Id字段类型是char(1),这将意味着什么呢?在Oracle里面char类型是专门用于存放固定长度字符数据类型。。。而Hibernate框架的开发人员在开发时考虑了这点,至于背后的实现这不是我现在该研究的了。。如果现在主键Id为char(4),即使你存进去了不足4个字节的长度,比如'a'等,那么用主键Id通过this.getSession().get(className.calss,Id),或者this.getSession().load(className.calss,Id)方法加载类,其实这是取不出来对象的。除非你存进数据库的ID char(4)的数据时满足4个字节的长度。。否则你只能通过麻烦的nativeSql进行操作实现单个对象的增删查改。


至于数据库的设计这不是我的能力范围,一看CHAR类型我也纳闷,为什么放着那么好的number类型varchar2类型不用用char类型。   我再次重申,虽然Hibernate的getSession().get(-----,---),getSession().load(-----,---)取不出对象,但是不代表Hibernate的Hql等其他Hibernate接口提供的方法不能取出对象。。。Oracle里面char(4)虽然是用来存固定长,但是可以存入小于它固定长4的数据啊,但是你是不能通过getSession.get(className,ID)或.load(className,ID)拿出ID数据类型为char(4)且在数据库的长度小于4的数据。。。。。。。。。。当然你可以用from className as a where a.id :='ID'拿出数据。。。。。。

热点排行