oracle時間欄位預設值,hibernate對映

langgufu314發表於2011-09-27

oracle時間欄位預設值用sysdate:

create table table_name(

id number not null,

tempdate date default sysdate)

建立序列號

create sequence sequence_name increate by 1 start with 1 maxvalue 9999;

insert into table_name(id) values(sequence_name.nextval)

但是在程式中,我儲存pojo時,屬性為空,但是在資料庫中卻沒取其預設值

在資料庫欄位是預設值時,如何設定hibernate,使得儲存某條pojo時,資料庫中出現相應欄位預設值,如下:

1、在hibernate的xml配置檔案中對有預設值欄位的property新增(insert="false" update="false"):

<property name="N_ISOK" type="java.lang.Long" insert="false" update="false">

            <column name="N_ISOK" precision="22" scale="0" />
</property>

注:insert="false" update="false" 的作用是不對當前欄位進行insert和update操作,這樣hibernate就不會在未指明預設列的情況下將資料庫表中預設值欄位清空,但同時也會造成無法對此欄位插入或更新非預設值。

這個辦法會使得該欄位永遠無法進行插入或更新操作,只能一直是預設值。
2、資料庫中表欄位必須設定預設值:

N_ISOK     NUMBER(2) default 1


方法二(推薦):


在hibernate.xml中的class加入dynamic-insert="true" dynamic-update="true"


如:<class name="com.hibernate.bean.TLoginUser" table="T_LOGIN_USER" schema="CALLERMMS" dynamic-insert="true" dynamic-update="true">


注:dynamic-insert="true" dynamic-update="true" 的作用是當HQL語句中未指明的列將不進行insert和update操作,這樣hibernate就不會在未指明預設列的情況下將資料庫表中預設值欄位清空。

這個靈活性更好,但該欄位有值時,動態插入或更新,採用該欄位值,若該欄位無值,則採用預設值。

 

記住有預設值的欄位一定不可允許為空,否則預設值無效,其必須是不空的,另hibernate對映配置檔案中,屬性轉換資料型別我設為java.util.date,結果出錯,設為date則可以,這個需要百度一下,看看怎麼回事。

相關文章