2016-11-01 6 views
1

私は3つの列:id int(10), status varchar(10), created_on timestamp NULL DEFAULT CURRENT_TIMESTAMPを持つMySQLテーブルを持っています。 INSERT INTO EMPLOYEE(status) VALUES('STATUS1')句を使用してテーブルに手動でレコードを挿入しようとすると、created_on列の値も正しく入力されます。Hibernateの更新はDEFAULT CURRENT_TIMESTAMP SQL節を処理しますか?

ただし、Hibernateを介してレコードを挿入しようとすると、created_on列に値が設定されません。それはNULLのままです。明示的にヌルではないと宣言していないので、私のコラムは現在nullが許されていますが、私の質問はハイバネート側に集中しています。

列に手動のINSERT節のように自動的に値が設定されるようにするにはどうすればよいですか?これは、休止状態が動作するように設計されている方法ですか?

は、ここに私の休止状態の抜粋です:

Transaction tx = session.beginTransaction(); 
    Employee employee = new Employee(status); 
    session.save(employee);   
    tx.commit(); 

そして、次の列が挿入クエリで指定されていない場合にのみ、

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

<hibernate-mapping> 
    <class name="Employee" table="EMPLOYEE"> 
     <meta attribute="class-description"> 
     This class contains the employee detail. 
     </meta> 
     <id name="id" type="int" column="id"> 
     <generator class="native"/> 
     </id> 
     <property name="status" column="status" type="string"/> 
     <property name="created_on" column="created_on" type="date"/> 
    </class> 
</hibernate-mapping> 

答えて

2

MySQLはデフォルト値を挿入しますHibernate設定です。

insert 
into 
    EMPLOYEE 
    (status, created_on) 
values 
    (?, ?) 

created_on列にnullを挿入します:あなたの現在のマッピングによると、Hibernateは次のクエリを生成します。デフォルトのCURRENT_TIMESTAMPをMySQLで使用するには、マッピングにinsert="false"を使用してください。

<property name="created_on" column="created_on" type="date" insert="false"/> 
+0

ブラボ;これは動作します!ありがとう。 –

関連する問題