【问题标题】:how to save object with sysdate functionality如何使用 sysdate 功能保存对象
【发布时间】:2013-07-26 09:33:47
【问题描述】:

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

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

我不能在查询本身上做吗?

可以为对象设置其他属性。但问题是这个到期日期,因为它需要 sysdate 并为其添加另一个值,例如:到期日期 = sysdate + 1000;我如何使用 jpa 准备好的语句来做到这一点。请回复我

【问题讨论】:

  • 只是一个想法:您可以将其保存为 null 并将 DB 上的默认值设置为 sysdate+1000。我不确定您是否可以将其声明为表结构的一部分,或者您是否可能需要设置插入/更新触发器
  • 我想用 jpa 本身来做,而不是在桌子上做。因为这 1000 它可以更改。 1000 是长型。那我该怎么做呢

标签: mysql hibernate jpa


【解决方案1】:

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

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

public interface Clock {
    Date now();
}

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

【讨论】:

    【解决方案2】:

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

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

    然后
    expirydate.getTime() 会给你过期日期对象。

    【讨论】:

      【解决方案3】:

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

      最简单的方法是使用java.util.Date 作为expiryDate 的类型和new Date(System.currentTimeInMillis() + 1000) 的值。在字段的声明中使用该值,以便在创建新的Student 时将其作为默认值,或者在修改现有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;
          }
      
          ...
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        相关资源
        最近更新 更多