`

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

 
阅读更多

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

     为了避免在应用服务器与数据库服务器分别部署时候,由于应用服务器时间与数据库时钟不同步导致的问题(这在交易系统中尤为重要),在编程时候应当尽量采用数据库时间戳而不要使用应用服务器的时间戳,另外为了避免直接使用特定数据库时间函数而导致的与数据库类型绑定,在后期数据库切换时候带来的修改成本,尽量充分利用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 的表达式来影射字段

  

 <property name=”mydate” type=”java.utl.date”  formula=”( select now() from bss_product bs ) ” /> 

 

注意:使用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的用法,实际上可以完成很多功能。

分享到:
评论

相关推荐

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     14.5.1 在数据库中对集合排序  14.5.2 在内存中对集合排序  14.6 映射组件类型集合  14.7 小结  14.8 思考题 第15章 映射实体关联关系  15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     14.5.1 在数据库中对集合排序  14.5.2 在内存中对集合排序  14.6 映射组件类型集合  14.7 小结  14.8 思考题 第15章 映射实体关联关系  15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     14.5.1 在数据库中对集合排序  14.5.2 在内存中对集合排序  14.6 映射组件类型集合  14.7 小结  14.8 思考题 第15章 映射实体关联关系  15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     14.5.1 在数据库中对集合排序  14.5.2 在内存中对集合排序  14.6 映射组件类型集合  14.7 小结  14.8 思考题 第15章 映射实体关联关系  15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射 ...

    spring in action英文版

     4.2 在Spring中使用JDBC  4.2.1 JDBC代码的问题  4.2.2 使用JdbcTemplate  4.2.3 把操作创建成对象  4.2.4 自增键  4.3 介绍Spring的ORM框架支持  4.4 用Spring整合Hibernate  4.4.1 ...

    ARCH4系统开发指南

    2.8 如何使用Hibernate操作Informix数据库 20 2.8.1 实现对LOB数据对象的支持 20 2.8.1.1 配置dataAccessContext-hibernate.xml 20 2.8.1.2 操作CLOB数据 20 2.8.1.3 操作BLOB数据 21 2.8.2 实现Sequence主键生成...

    java源码包2

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    JAVA上百实例源码以及开源项目源代码

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,...

    java源码包---java 源码 大量 实例

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    Java学习笔记-个人整理的

    {5.1.1}各类时间日期转换}{94}{subsection.5.1.1} {5.1.2}时间的输入与输出}{97}{subsection.5.1.2} {5.2}数字的输入输出}{97}{section.5.2} {5.2.1}将浮点数四舍五入到指定精度}{98}{subsection.5.2.1} {6}...

    java开源包8

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java源码包3

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    java源码包4

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    java开源包1

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

Global site tag (gtag.js) - Google Analytics