1. 程式人生 > >在Hibernate中對資料庫預設值的寫入問題

在Hibernate中對資料庫預設值的寫入問題

如果在資料表中設定了一個欄位的預設值(比如說預設當前日期之類的),並且該欄位又不允許為空。如果是用Eclipse中的反向工程對該資料生成的POJO類和hbm.xml對映檔案,這時應該要修改對映檔案中的兩個地方才能正常使用資料庫中的預設值。

一是將dynamic-insert設定為true

二是將對應欄位的屬性設定not-null為false

比如:

<class name="com.yorker.netmarket.pojo.Custorder" table="tableName"
    schema="dbo" catalog="databaseName" dynamic-insert="true" dynamic-update="true"

>

....

<property name="orderTime" type="java.util.Date">
       <column name="orderTime" length="23" not-null="false" />
    </property>

</class>

Hibernate允許我們在對映檔案裡控制insert和update語句的內容.比如在對映檔案中<property 元素中的update屬性設定成為false,那麼這個欄位,將不被包括在基本的update語句中,修改的時候,將不包括這個欄位了.insert同理.dynamic動態SQL語句的配置也是很常用的.下面介紹配置SQL語句的具體屬性:
      1)<property>元素 insert屬性:設定為false,在insert語句中不包含這個欄位,表示永遠不會被插入,預設true
      2)<property>元素 update屬性:設定為false,在update語句中不包含這個欄位,表示永遠不會被修改,預設true
      3)<class>元素 mutable屬性:設定為false就是把所有的<property>元素的update屬性設定為了false,說明這個物件不會被更新,預設true
      4)<property>元素 dynamic-insert屬性:設定為true,表示insert物件的時候,生成動態的insert語句,如果這個欄位的值是null就不會加入到insert語句當中.預設false
      5)<property>元素 dynamic-update屬性,設定為true,表示update物件的時候,生成動態的update語句,如果這個欄位的值是null就不會被加入到update語句中,預設false
      6)<class>元素 dynamic-insert屬性:設定為true,表示把所有的<property>元素的dynamic-insert屬性設定為true,預設false
      7)<class>元素 dynamic-update屬性:設定為true,表示把所有的<property>元素的dynamic-update屬性設定為true,預設false

      Hibernate生成動態SQL語句的消耗的系統資源(比如CPU,記憶體等)是很小的,所以不會影響到系統的效能,如果表中包含N多欄位,建議把dynamic-update屬性和insert屬性設定為true,這樣在插入和修改資料的時候,語句中只包括要插入或者修改的欄位.可以節省SQL語句的執行時間,提高程式的執行效率.

相關推薦

Hibernate資料庫預設寫入問題

如果在資料表中設定了一個欄位的預設值(比如說預設當前日期之類的),並且該欄位又不允許為空。如果是用Eclipse中的反向工程對該資料生成的POJO類和hbm.xml對映檔案,這時應該要修改對映檔案中的兩個地方才能正常使用資料庫中的預設值。 一是將dynamic-insert設定為true 二是將對應欄位

PHP在foreach$value賦無效,應該用 ‘鍵’ 或者 &$value的形式

image blank key warn 運行 clas 應該 發現 建議 首先我們看下這段代碼: foreach ($data as$value) { $value[‘name‘] = ‘Hehe‘; } $data中原始的數據為: array(

Hibernate象的三種狀態

less val ssi action 之前 一個數據庫 cti 事務提交 color 一 . 在hibernate中,對象有三種狀態:臨 時狀態(Transient)、持久狀態(Persistent)和遊離狀態(Detached)。     處於持久態的對象也稱為 PO

MySQL5.7的sql_mode預設

簡介 在正常專案開發過程中,如果MySQL版本從5.6升級到5.7版本。作為DBA在考慮資料庫版本升級帶來的影響時,一般會有幾個注意點: sql_mode 預設值的改變 optimizer_switch 值的改變 備庫升級影響主備複製 本文主要內容是MySQL升級到5.7版本之後,由於

Hibernate欄位的預設

  HIbernate insert資料時,未賦值的欄位插入資料庫時值為null,而不是資料庫中設計的預設值   解決方法:對映檔案中<class元素加入dynamic-insert,dynamic-update屬性 <class name="User

Linux系統資料庫使用和管理

資料庫是IP行業的金飯碗 1.定義:高階的excel表格軟體 2.知名的資料庫 oracle(不是開源的) mysql(開源) mariadb(mysql中一個分支) 一.安裝資料庫 1.安裝資料庫軟體 yum install mariadb-server -y 2.開啟服

談談實際專案 資料庫設計 的一些思考

注:本人開發經驗尚淺,下文主要談的是自己的一些想法,不足之處請指出。 最近半年時間都花在管理系統的開放上面,對資料庫的設計有一些自己的想法,在我看來資料庫設計的key point就是妥協。一個設計的比較好的資料庫都是在業務邏輯、設計規約和便於開發這三者之前來回考量,從而獲得

hibernate 對映檔案配置預設方法

                問題描述:    hibernate技術中對應資料庫中每一個表,都會有一個對映檔案與之對應,此檔案描述資料庫表中每一個欄位的型別、長度、是否可空等屬性。在進行表中記錄的插入(更新)操作時,hibernate會根據對映檔案中的描述自動生成一個包含所有欄位的插入(更新)sql語句,

Hibernate單表操作----查詢單個記錄

(1)類名 a=(類)session.get(類名.class,表中的主鍵) ; //從表中的主鍵獲取表中相應列的成員 類名 a=(類)session.load(類名.class,表中的主鍵);

C#資料庫的基本操作(增刪改以及呼叫儲存過程)

因為最近在寫web API的時候需要對資料庫操作,所以要用到ADO.NET,因為之前沒有接觸過.NET所以也是一邊上網查資料看C#書一邊寫,現在對這塊基礎的部分已經掌握了,現在寫下來只是想對自己前段時間的學習做個簡單的總結,也便於自己以後查閱(網上有很多類似的資源,大家可以

Hive資料庫,表的操作

在應用Hive之前,首先搭建Hive環境,關於Hive的搭建 參考之前的搭建文件 Hive官方應用文件 資料定義語言 DDL 1、Create Database Hive中資料庫的建立和關係型資料庫類似,用create datebas

Hibernate資料庫方言(Dialect)

在配置hibernate.cfg.xml時需指定使用資料庫的方言: 例: <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 以下是各資料庫對應的方言(D

android專案spinner設定預設

spinner用介面卡裝載完資料後, 再設定spinner預設值 1. 根據選項或選項位置來設定spinner預設值, 如: 進入該activity後, spinner預設值為選項"情感生活"(表示筆

在Java如何實現方法引數帶預設

Java與C++不同不支援方法中的引數帶預設值,但是有方法來實現該功能的,這就需要使用函式過載 看下面的程式碼例項: public void TestParameter(int level)

Hibernate系列學習之對映持久化類--Hibernate實體型別和型別概念辨析

一、前言 在學習Hibernate的對映 持久化類部分時,遇到兩個概念–實體型別、值型別,一直搞不明白,現在將自己的理解整理一下。 二、概念辨析 2.1前言 當檢視域模型時,你將會注意到類之間的一個區別:有些型別看起來更為重要,它們表示了最重要的

Swift——(五)Swift的那些預設

    在Swift語言中,有很多預設值,這裡將常用的總結,歡迎補充。    1.函式(方法)形參   在函式(方法)中,形參預設是常量,不可以在函式(方法)內部進行修改,這主要是為了防止誤操作,防止在

Qt工作筆記-QMLTextInput設定預設,以及使用正則表示式只能輸入整數

程式執行截圖如下: 原始碼如下: import QtQuick 2.5 import QtQuick.Window 2.2 Window { visible: true wid

Hibernate插入資料到資料庫時讓欄位預設生效

資料庫中一個欄位的預設值設為0,當用hibernate插入資料時,沒有對該欄位進行操作,結果該欄位居然不是0,而是空。後來google了一下,發現應該在.hbm.xml檔案中新增一些引數定義(示例中的紅色部分),具體如下: <hibernate-mapping> 

資料庫設定預設修改hibernate對映檔案

在有時候我們會給資料庫中新增一些預設的欄位值,我在程式中往這張表中新新增資料的時候該欄位值沒有填寫的時候就會報錯。我們的處理方法是在hibernate的配置檔案中修改該欄位的配置資訊例如新增如下配置檔案 <property name="source" type="ja

資料庫時間欄位為null,獲取資料庫資料對映到類,類相應的屬性的是null還是時間預設

          由於最新需要判斷資料庫中時間是否符合邏輯資料來做後續業務處理,但是就是有點蒙,開始直接判斷是否為初始值,就是預設值,也就是  DateTime.MinValue,但是我想就是不對,