如何在hibernate中插入/更新sysdate?

问题描述:

我正在使用休眠。 db是oracle。我的要求是我需要插入/更新一个实体与sysdate但不是新的日期()。请帮我怎么做到这一点?如何在hibernate中插入/更新sysdate?

谢谢!

您可以使用current_timestamp()HQL函数来实现该功能。

+0

嗨,安德烈,谢谢你的回复。请你能给我这个功能的用法。现在我正在使用合并(实体)方法。 – reddy

经过长时间的R & D后,终于找到了在日期列中使用hibernate插入/更新数据库SYSDATE(而不是应用程序服务器Date)的解决方案。希望它会帮助你,请查收为上述

1的溶液)mapping.hbm.xml文件中添加额外的属性如下面

property name="systemDate" formula="(select sysdate from dual)" 

2)添加getter和setter方法为“systemDate”属性在POJO类

private Date systemDate; 

public Date getSystemDate() { 
    return this.systemDate; 
} 

public void setSystemDate(Date systemDate) { 
    this.systemDate = systemDate; 
} 

3)在你的DAO,插入或更新日期列前,取systemDate属性,并使用该值保存会话。

POJOclass Obj = new 

// the below line returns the database system date,because we had given the formula for this property in mapping.xml file 

Date systemDate= POJOclassObj.getSystemDate(); 

并将上述日期添加到您的列中。它会插入数据库sysdate。

第一个(接受的)答案实际上不符合要求,因为它将使用新的Date()。 OP的解决方案有效,但有点麻烦。当行被创建时,sysdate可以被指定为列的默认值。对于更新,大多数DBA似乎都定义了一个更新列值的before触发器。触发器是有益的,因为它可以防止规避规则。