2016-11-01 9 views
1

Ich habe eine MySQL-Tabelle mit drei Spalten: id int(10), status varchar(10), created_on timestamp NULL DEFAULT CURRENT_TIMESTAMP. Wenn ich versuche, Datensätze manuell in der Tabelle unter Verwendung der INSERT INTO EMPLOYEE(status) VALUES('STATUS1')-Klausel einzufügen, füllt sie den Wert der Spalte created_on ebenfalls korrekt auf. Wenn ich versuche, Datensätze über Hibernate einzufügen, wird die created_on Spalte nicht aufgefüllt. Es bleibt als NULL erhalten. Ich verstehe, dass meine Spalte derzeit null zulässt, da ich nicht explizit angekündigt habe, dass sie nicht null ist, aber meine Frage konzentriert sich eher auf die Hibernationsseite.Aktualisiert Hibernate Update DEFAULT CURRENT_TIMESTAMP SQL-Klausel?

Was kann ich tun, um sicherzustellen, dass die created_on Spalte automatisch wie die in meinem Handbuch INSERT Klausel aufgefüllt wird? Oder ist dies der Weg, wie Hibernate funktioniert?

Hier ist meine Hibernate-Schnipsel:

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

Und finden Sie die Hibernate-Konfiguration

<?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> 

Antwort

2

MySQL nur Standardwerte einfügen, wenn die Spalte nicht in der INSERT-Abfrage angegeben wird. Nach Ihrem aktuellen Mapping, Hibernate wird die folgende Abfrage produzieren:

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

Welche null created_on Spalt einfügen wird. Um den Standard CURRENT_TIMESTAMP von MySQL zu verwenden, verwenden Sie in Ihrem Mapping insert="false".

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

Bravo; das funktioniert! Vielen Dank. –

Verwandte Themen