Hibernate 更新是否处理 DEFAULT CURRENT_TIMESTAMP SQL 子句?
Does Hibernate update handle DEFAULT CURRENT_TIMESTAMP SQL clause?
我有一个包含三列的 MySQL table:id int(10), status varchar(10), created_on timestamp NULL DEFAULT CURRENT_TIMESTAMP
。当我尝试使用 INSERT INTO EMPLOYEE(status) VALUES('STATUS1')
子句在 table 中手动插入记录时,它也正确地填充了 created_on
列的值。
但是,当我尝试通过 Hibernate 插入记录时,created_on
列未填充。它保持为 NULL。我知道我的专栏目前允许空值,因为我没有明确宣布它不为空,但我的问题更集中在休眠方面。
如何确保 created_on
列像我的手动 INSERT
子句一样自动填充?或者这就是休眠设计的工作方式?
这是我的休眠片段:
Transaction tx = session.beginTransaction();
Employee employee = new Employee(status);
session.save(employee);
tx.commit();
下面是 Hibernate 配置
<?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>
MySQL 仅当插入查询中未指定列时才会插入默认值。根据您当前的映射,hibernate 将生成以下查询:
insert
into
EMPLOYEE
(status, created_on)
values
(?, ?)
这会将 null 插入到 created_on
列。要使用 MySQL 的默认值 CURRENT_TIMESTAMP
,请在映射中使用 insert="false"
。
<property name="created_on" column="created_on" type="date" insert="false"/>
我有一个包含三列的 MySQL table:id int(10), status varchar(10), created_on timestamp NULL DEFAULT CURRENT_TIMESTAMP
。当我尝试使用 INSERT INTO EMPLOYEE(status) VALUES('STATUS1')
子句在 table 中手动插入记录时,它也正确地填充了 created_on
列的值。
但是,当我尝试通过 Hibernate 插入记录时,created_on
列未填充。它保持为 NULL。我知道我的专栏目前允许空值,因为我没有明确宣布它不为空,但我的问题更集中在休眠方面。
如何确保 created_on
列像我的手动 INSERT
子句一样自动填充?或者这就是休眠设计的工作方式?
这是我的休眠片段:
Transaction tx = session.beginTransaction();
Employee employee = new Employee(status);
session.save(employee);
tx.commit();
下面是 Hibernate 配置
<?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>
MySQL 仅当插入查询中未指定列时才会插入默认值。根据您当前的映射,hibernate 将生成以下查询:
insert
into
EMPLOYEE
(status, created_on)
values
(?, ?)
这会将 null 插入到 created_on
列。要使用 MySQL 的默认值 CURRENT_TIMESTAMP
,请在映射中使用 insert="false"
。
<property name="created_on" column="created_on" type="date" insert="false"/>