Hibernate不能load()和get())

今天才搞明白,数据类型与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)方法加载类,其实这是取不出来对象的。除非你存进数据库的IDchar(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的数据。。。。。。。。。。当然你可以用fromclassNameasawherea.id:='ID'拿出数据。。。。。。

相关推荐