如何使用sysdate功能保存对象

时间:2013-07-26 09:33:48

标签: mysql hibernate jpa

我有一个对象学生。然后有一个名为失效日期的财产。这需要使用数据库sysdate +值(1000)进行设置。 那我怎么能用jpa保存。我不能在jpa准备语句查询本身上做到这一点吗?

如果我使用sql.date,它是否与我们保存为'sysdate'时的值完全相同?

我无法在查询本身上执行此操作吗?

可以将其他属性设置为该对象。但问题是这个到期日,因为它需要sysdate并为其添加另一个值,例如:expiry date = sysdate + 1000;我怎么能用jpa准备好的陈述来做。请回复我

3 个答案:

答案 0 :(得分:0)

如何使用单独的查询来检索sysdate并将其设置为您的对象。

我通常会创建一个时钟来处理这个问题:

public interface Clock {
    Date now();
}

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

答案 1 :(得分:0)

您可以在java中添加它。使用日历对象添加天数。

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

然后
expirydate.getTime()将为您提供过期日期对象。

答案 2 :(得分:0)

为什么要使用sysdate?它的语法是特定于数据库的,也取决于数据库托管机器的时钟,而不是你的应用程序托管机器的时钟。

最简单的方法是使用java.util.Date作为expiryDate的类型和new Date(System.currentTimeInMillis() + 1000)的值。在字段的声明中使用此值,将其作为新Student创建的默认值,或者在修改存在的Student时将其用作传递给setter的值。

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;
    }

    ...

}