如何使用Hibernate SQLquery实现动态表

介绍

这篇文章主要讲解了“如何使用Hibernate SQLquery实现动态表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习”如何使用Hibernate SQLquery实现动态表”吧!

在实际的项目应用中,有时会设计出这样的一种数据表,每个时间段产生一个新表,例如是按年或月或日。相同类型的表中,所有的字段结构都是一样的。而Hibernate提供的类与表的映射,是只能映射到一个具体表的,在程序的运行过程中,很难去动态修改一个hbm对应的表名。我在网上也有看到一实现,但是很复杂,并且不符合我的要求。

因此我就想到直接用jdbc去操作数据库,这样的做法是绕过冬眠了。方法是从Hibernate的会话中,直接取得数据库连接,然后就直接jdbc了。

后来在升级了proxool到9.0 rc3后,发现居然出现了数据库连接无法释放的问题。为了解决这个问题,我查阅了Hibernate医生。我发现原来用Hibernate SQLquery可以更好的解决,并且可以重新用于Hibernate hbm机制。以下举例说明。

例如我有一个pojo是ReadInfo,用来记录阅读信息的。由于数据量宠大,所以我的思路是按月划分,每个月一张表,所以只是表名不同,而字段是完全相同的。

ReadInfo。java是这样的,其中userId,年,月,日是联合主键:

私人整数标识;

私人整数;

私人整数;

私人整数天;

私人整数点;

那么相应的ReadInfo.hbm。xml 的片段是

< class name= "ReadInfo" table= "tblReadInfo " mutable = "false" >           < composite-id>               < key-property name= "userId" column= "userId" type= "integer" / >               < key-property name= "year" column= "year" type= "integer" / >               < key-property name= "month" column= "month" type= "integer" / >               < key-property name= "day" column= "day" type= "integer" / >           < / composite-id>           < property name= "point" column= "point" type= "integer" / >       < / class>

上面的xml,注意 2 个细节

1. pojo所映射的表tblReadInfo实际上是不存在的。实际的表是tblRead200710之类的;

2。null

如何使用Hibernate SQLquery实现动态表