2017-02-12 14 views
0

MySQLデータベースにデータを挿入しても問題ありません。今私はもう一つの列 "日付"を追加したいと思うし、私はデフォルトとして挿入の日付を挿入したい。どうやってやるの?デフォルトの日付値Hibernate

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

} 

感謝!

あなたは dateの値を設定しているオブジェクトを永続化しようとしていない場合は、データベース

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

この方法に行を挿入する前に、属性に現在の日付を割り当てること@PrePersistアノテーションを使用することができます

答えて

1

DB、現在の日付を値として取得します。

+0

上の注釈付きJPAコールバックメソッドを追加することで、他の提案の回答を使用することができます私は注釈で「FbData」クラスにそのメソッドを置きます。私は挿入を行いますが、列 "date"のすべてのフィールドは "null"です。 – MathiasMS

+0

どのバージョンのHibernateを使用していますか?セッションやEntityManagerをブートストラップしていますか?私は、Hibernate-centricとJPA-centricの両方のオプションをカバーする答えを加えました。 – Naros

1

これを行うためのHibernate固有の方法は、@CreationTimestamp注釈を使用することです。 javadocツールから

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

hereが見つかりました:

を含むエンティティの作成タイムスタンプとしての性質をマークします。プロパティー値は、所有エンティティーを初めて保存するときに、現在のJVM日付に1回だけ設定されます。

サポートされているプロパティのタイプ:

  • java.util.Date
  • カレンダー
  • java.sql.Date
  • 時間
  • タイムスタンプ

あなたがしたい場合これをJPA仕様で行うにはCソリューションでは、次の2つの方法で対応できます。

  • エンティティリスナーハンドラを適用します。
  • エンティティ・リスナーを適用するには、エンティティ

@PrePersistコールバックメソッドを適用します。

// A simple interface 
public interface CreationTimestampAware { 
    void setCreationTime(Date date); 
    Date getCreationTime(); 
} 

// Define the entity listener 
public class CreationTimestampListener { 
    @PrePersist 
    public void onPrePersist(Object entity) { 
    // entity implements a CreationTimestampAware interface that exposes 
    // the single method #setCreationTime which we call here to set 
    // the value on the entity. 
    // 
    // Just annotate the entities you want with this functionality 
    // and implement the CreationTimestampAware interface 
    if (CreationTimestampAware.class.isInstance(entity)) { 
     ((CreationTimestampAware) entity).setCreationTime(new Date()); 
    } 
    } 
} 

// Link to your entity 
@EntityListeners({CreationTimestampListener.class}) 
public class SomeEntity implements CreationTimeAware { 
    // specify your date property and implement the interface here 
} 

あなたは、複数のエンティティ間で機能が必要な場合、あなたは簡単に最小限の労力でこれにフックし、管理することができます機能は複数のエンティティではなく1つの場所にあります。

しかし、これは単純な単一エンティティ機能のための多くの作業です。その場合は、あなただけの実体そのもの

@PrePersist 
private void onPersistCallback() { 
    // just set the value here 
    // this will only ever be called once, on a Persist event which 
    // is when the insert occurs. 
    this.date = new Date(); 
} 
関連する問題