默认日期值Hibernate

时间:2017-02-12 23:32:52

标签: mysql hibernate date insert sql-insert

我在MySQL数据库上插入一些数据没有任何问题。现在我想再添加一列“date”,我想插入默认的插入日期。我怎么能这样做?

“FbData.hbm.xml”:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.hibernate.FbData" table="dataresponse" catalog="karma">
        <id name="idData" type="java.lang.Integer">
            <column name="idData" />
            <generator class="identity" />
        </id>
        <property name="likes" type="java.lang.Long">
            <column name="likes"  not-null="false" unique="false" />
        </property>
         <property name="shares" type="java.lang.Long">
            <column name="shares"  not-null="false" unique="false" />
        </property>
        <property name="time" type="string">
            <column name="time"  not-null="false" unique="false" />
        </property>
        <property name="idPage" type="string">
            <column name="idPage" not-null="false" unique="false" />
        </property>
    </class>
</hibernate-mapping>

我的班级有吸气剂和二传手:

public class FbData implements Serializable{

    private static final long serialVersionUID = 1L;

    private Integer idData;
    private Long likes;
    private Long shares;
    private String time;
    private String idPage;

}

先谢谢!!!

2 个答案:

答案 0 :(得分:1)

在将行插入数据库之前,您可以使用@PrePersist注释为属性分配当前日期

@PrePersist
protected void onCreate() {
    if (date == null) {
        date = new Date();
    }
}

这样,如果您没有设置date的值并尝试将对象持久保存到数据库,您将获得当前日期作为值。

答案 1 :(得分:1)

Hibernate执行此操作的具体方法是使用ThreadLocal注释。

Webdriver

从javadoc找到here

  

将属性标记为包含实体的创建时间戳。第一次保存拥有实体时,属性值将恰好设置为当前JVM日期一次。

     

支持的属性类型:

     
      
  • java.util.Date
  •   
  • 日历
  •   
  • java.sql.Date
  •   
  • 时间
  •   
  • 时间戳
  •   

如果您想使用特定于JPA的解决方案,可以通过以下两种方式执行此操作:

  • 应用实体侦听器处理程序。
  • 在实体上应用@CreationTimestamp回调方法

要应用实体侦听器:

@Entity
public class SomeEntity {
  @CreationTimestamp
  private Date date;
}

如果您需要跨多个实体的功能,您可以轻松地以最少的工作量并在一个地方而不是在多个实体中管理功能。

但是,对于简单的单一实体功能而言,这需要做很多工作。如果是这种情况,您可以使用其他建议的答案,只需在实体本身上添加带注释的JPA回调方法

@PrePersist