2013-07-26 51 views
0

我有一個對象學生。那麼有一個叫做到期日的財產。這需要使用數據庫sysdate +值(1000)進行設置。 所以如何保存jpa。我不能在jpa準備的語句查詢本身上做它嗎?如何用sysdate功能保存對象

如果我使用sql.date它確實給出了與我們保存爲'sysdate'時的值相同的值?

我不能在查詢本身上做到這一點嗎?

其他屬性可以設置爲對象。但問題是這個失效日期,因爲它需要sysdate並添加另一個值,例如:expiry date = sysdate + 1000;我怎樣才能用jpa準備好的語句呢。請回復我

+0

只是一個想法:你可以將它保存爲空,並且默認DB上的值爲sysdate + 1000。我不確定你是否可以聲明這是表結構的一部分,或者如果你可能需要設置一個插入/更新觸發器 – Augusto

+0

我想用jpa本身而不是在桌子上做。因爲這1000可以改變。 1000是一種長型。所以我該怎麼做 – user2622132

回答

0

如何使用單獨的查詢來檢索sysdate並將其設置爲您的對象。

我usally創建一個時鐘來處理這個問題:

public interface Clock { 
    Date now(); 
} 

public class HibernateClock implements Clock { 
    //use query to retieve the db sysdate 
} 
0

可以在Java本身添加。使用日曆對象添加日期。

 Calendar expirydate=Calendar.getInstance(); 
    expirydate.add(Calendar.DATE, 1000); 

然後
expirydate.getTime()會給你到期日期的對象。

0

爲什麼要使用sysdate?它的語法與數據庫相關,也取決於數據庫託管機器的時鐘,而不是應用程序託管機器的時鐘。

最簡單的方法是使用java.util.Date作爲expiryDate的類型和值new Date(System.currentTimeInMillis() + 1000)。在字段的聲明中使用此值將其作爲新的Student創建時的默認值,或在修改existant Student時將其用作傳遞給設置者的值。

public class Student { 

    ... 

    /** 
    * Using java.util.Date here. Hibernate knows to convert it automagically to java.sql.Date. 
    * Set default value to current time + 1 second, if this is your requirement. 
    */ 
    private Date expiryDate = new Date(System.currentTimeInMillis() + 1000); 

    public void setExpiryDate(final Date expiryDate) { 
     this.expiryDate = expiryDate; 
    } 

    ... 

}