use oracle sysdate as hibernate Date

I have a column in DB with default value as sysdate. I’m looking for a way to get that default value inserted while I’m not giving anything to corresponding property on app side.  If I did not set any value to the field, i get null in the DB.  The reason why the date column gets a null value when inserting, even though it is defined as default SYSDATE dbms-side, is that the default value for a column is only used if the column is not given a value in the query. That means it must not appear in the INSERT INTO sentence, even if it has been given null.

If you want to use the default SYSDATE on the DBMS side, you should configure the @Column with insertable=false in order to get the column out of your SQL INSERTs.

@Column(name = "myDate", insertable=false)
private Date myDate;

Take into account that this approach will always ignore the value you provide to the property in your app when creating the entity. If you really want to be able to provide the date sometimes, maybe you should consider using a DB trigger to set the value instead of a default value.

There’s an alternative to using the default SYSDATE definition of the DBMS. You could use the @PrePersistand @PreUpdate annotations to assign the current date to the property, prior to save/update, if and only if it has not been assigned yet:

protected void onCreate() {
    if (myDate == null) { myDate = new Date(); }

This closely related question provides different approaches: Creation timestamp and last update timestamp with Hibernate and MySQL.




One comment

  1. Diego José · November 24, 2014

    This helped me a lot, thank you alot :).

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s