在Hibernate中使用日期函数获取数据库时间

如果要用hibernate保存记录新增和修改时的时间戳,方案是:在代码里先取数据库时间,再进行insert或update操作!

为了避免在应用服务器与数据库服务器分别部署时候,由于应用服务器时间与数据库时钟不同步导致的问题(这在交易系统中尤为重要),在编程时候应当尽量采用数据库时间戳而不要使用应用服务器的时间戳,另外为了避免直接使用特定数据库时间函数而导致的与数据库类型绑定,在后期数据库切换时候带来的修改成本,尽量充分利用Hibernate来完成对数据库时间戳的获取,做到对数据库类型及函数的隔离。在Hibernate中有如下几种方案可以采用:

1、利用Hibernate本身提供的current_date,current_timestamp,current_time函数

由于Hibernate在HSQL中必须有对象,因此使用这些函数时候必须依托某个vo对象。例如有一个VO对象BssProduct。

select current_timestamp() from BssProduct

2、 利用Hibernate的formula表达式来做影射

例如在BssProduct.hbm.xml中通过formula 的表达式来影射字段

  

注意:使用formula时候sql语句中的table名称及字段名称一定要是数据库中的表名称,而不能用表影射的java类。

然后在BssProduct.java VO中增加mydate的get,set方法

    private Date mydate;

    public Date getMydate() {

        return mydate;

    }

    public void setMydate(Date mydate) {

        this.mydate = mydate;

    }

然后在HSQL中就可以把mydate作为普通的字段使用

select product.mydate from BssProduct product

这样在切换数据库时候只需要修改配置文件即可,而不用修改代码。

当然与此类似,可以通过NamedSQLQuery的方式来配置sql,调用数据库函数,然后迁移数据库时候也只需要修改对应的sql,而不用修改代码。

3、通过数据库对视图的支持,然后Hibernate来做影射,通过视图来隔离数据库函数的不同。

但此种方式对于不支持视图的数据库无效(5.0以前的Mysql不支持视图)

CREATE VIEW my_timestamp AS SELECT CURRENT_TIMESTAMP AS my_timestamp

一般情况采用current_timestamp等缺省函数,特殊情况采用formula方案,有空可以仔细研究一下formula的用法,实际上可以完成很多功能。

Technorati 标签: hibernate,hsql,时间函数,formula,数据库时间

附上100%完整的系统项目源码:

JSP图书馆管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101a97e.html

 

JSP酒店宾馆管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101a97m.html

 

JSP学生信息管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101a97r.html

 

JSP房屋出售租赁管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101a98c.html

 

J2EE酒店在线预订系统:http://blog.sina.com.cn/s/blog_4b5bc0110101a97v.html

 

SSH/J2EE人力资源管理系统:http://blog.sina.com.cn/s/blog_4b5bc01101019ztu.html

 

ssh2图书管理系统(图书馆管理系统): http://blog.sina.com.cn/s/blog_4b5bc0110101adf0.html

 

毕业设计-JSP图书馆管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101a979.html

 

毕业设计-JSP酒店宾馆管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101a97z.html

 

毕业设计-JSP学生信息管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101a987.html

 

毕业设计-JSP房屋出售租赁管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101a98a.html


毕业设计-s2sh/j2ee图书管理系统 :http://blog.sina.com.cn/s/blog_4b5bc0110101ain5.html


ssh2图书管理系统(图书馆管理系统):http://blog.sina.com.cn/s/blog_4b5bc0110101adf0.html


毕业设计-jsp信息发布系统(信息供求网站系统):http://blog.sina.com.cn/s/blog_4b5bc0110101aiou.html


struts2+servlet+jsp信息发布系统:http://blog.sina.com.cn/s/blog_4b5bc0110101aiop.html


毕业设计-jsp电子商城 网上商城系统:http://blog.sina.com.cn/s/blog_4b5bc0110101aiof.html


jsp电子商城 网上商城系统(struts+servlet+jsp):http://blog.sina.com.cn/s/blog_4b5bc0110101aio9.html


毕业设计-图书管理系统 jsp图书馆系统Struts2+Spring+Ibatis+extjs(ssi):

http://blog.sina.com.cn/s/blog_4b5bc0110101ainu.html


Struts2+Spring+Ibatis+extjs(ssi)图书管理系统 jsp图书馆系统:

http://blog.sina.com.cn/s/blog_4b5bc0110101ainh.html


ssh2图书管理系统(图书馆管理系统):http://blog.sina.com.cn/s/blog_4b5bc0110101adf0.html


毕业设计-s2sh/j2ee图书管理系统 struts2+spring+hibernate:

http://blog.sina.com.cn/s/blog_4b5bc0110101ain5.html

 

 jsp酒店在线预订系统 酒店客房预定系统:http://blog.sina.com.cn/s/blog_4b5bc0110101atb8.html

 

毕业设计 jsp酒店在线预订系统 酒店客房预定系统:http://blog.sina.com.cn/s/blog_4b5bc0110101atbb.html

 

人力资源管理系统 S2SH/J2EE/JAVA:http://blog.sina.com.cn/s/blog_4b5bc0110101azoz.html

 

毕业设计-人力资源管理系统 S2SH/J2EE/JSP:http://blog.sina.com.cn/s/blog_4b5bc0110101azp0.html

 

ssh网上商城 电子商城struts hibernate  :http://blog.sina.com.cn/s/blog_4b5bc0110101b5gr.html

 

毕业设计 ssh网上商城 电子商城struts hibernate:http://blog.sina.com.cn/s/blog_4b5bc0110101b5h2.html

 

毕业设计 ssh电子相册管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101bkbl.html

 

旋风软创图书管理系统 完美加强版 :http://blog.sina.com.cn/s/blog_4b5bc0110101cbpb.html

 

s2sh毕业设计管理系统:http://blog.sina.com.cn/s/blog_4b5bc0110101cvkp.html


 

 

实用技术:

J2EE/JSP应用技术70实例(源码)(实用): http://blog.sina.com.cn/s/blog_4b5bc0110101acms.html


你可能感兴趣的:(在Hibernate中使用日期函数获取数据库时间)