1. 程式人生 > >hibernate在用註解設定欄位的預設值時遇到的問題

hibernate在用註解設定欄位的預設值時遇到的問題

今天小編在用hibernate設定欄位的預設值的時候遇到的一個小問題,特意分享一下,以免後來人繼續犯錯。。

小編的pojo層的程式碼是這樣寫的。。

package com.Shayla.pojo;


import java.io.Serializable;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


import org.hibernate.annotations.DynamicInsert;




@Entity
@Table(name="t_user")
public class User implements Serializable{


private static final long serialVersionUID = 1L;

  @Id


  @GeneratedValue(strategy=GenerationType.AUTO)    //主鍵生成策略
  private Integer id;
  private String username;
  private String password;
  private String nickname;
  @Column(nullable=false,columnDefinition="Integer default 1")   //這裡是設定這個欄位的預設值是Integer型別並且值為1
  private String status;
//省略getter和setter方法。。。。。
}

但是這樣在插入資料進資料庫的時候是會報下面這個錯誤的。。。


就是說,這個欄位在執行hibernate生成的sql語句

的時候,欄位status還是空的(null),小編設定的預設值完全不管用。。0

小編在網上找到了解決的方法。。

就是往類名上面加上一個註解。。。@DynamicInsert

這個註解的作用如下(小編在網上查到一位大神的部落格,截圖下來的)。。

這個註解的功能就是,當hibernate生成insert語句的時候會把值為null的欄位過濾掉,不加入insert語句的引數中。

小編猜想,hiebernate給欄位設定預設值是在hibernate生成的insert語句執行之後再生成一條insert語句,專門插入status的值。。

你們覺得呢。。。。。

相關推薦

hibernate註解設定預設遇到的問題

今天小編在用hibernate設定欄位的預設值的時候遇到的一個小問題,特意分享一下,以免後來人繼續犯錯。。 小編的pojo層的程式碼是這樣寫的。。 package com.Shayla.pojo;

jpa設定預設

private Integer clientArticleCount=0;//文章的數量 相當於設定欄位預設值 @Column public Integer getClientArticleCoun

Spring Data JPA 設定預設

在Column註解中寫入以下兩個屬性,為什麼自己查一下文件吧,即可實現欄位預設值設定,並順帶解決save方法所生成的sql語句中自動填充欄位為null的問題。預設值無法更新,所以如果想在程式碼裡修改欄位

Hibernate插入資料到資料庫中預設生效

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

Mysql 修改預設

環境描述: MySQL 5.7.13 問題描述: 建表的時候,users_info表的role_id欄位沒有預設值,後期發現註冊的時候,需要提供給使用者一個預設角色,也就是給role_id欄位一個預設值。 當前users_info表的role_id 在建立表的時候,

mysql 建立表 日期預設為當前時間

    mysql version 5.1     在mysql建立表的時候經常會遇到建立日期欄位需要設定當前時間為預設值的時候,就如sqlserver2000一樣,把預設值設為getdate()即可,我在網上查了N久都沒有查到使用有效的方法,最後自己研究了一些方法與大家分

Java獲取註解屬性

    最近看一些ORM框架的原始碼,自己記錄一些筆記.類似於JPA,不用手寫Sql,那個實體類要要@Table和@Column註解.(基於JDK1.8).    首先自己定義一個@Column註解.@Target(ElementType.FIELD) @Retention(

hibernate通過註解設定自增

簡單版: @Id @GeneratedValue(strategy=GenerationType.IDENTITY)  設定大小版: @GeneratedValue(strategy=Generati

hibernate設定不持久化 註解

hibernate中Modle中的有些屬性不想建立表是在資料庫中產生欄位儲存資料,當這種需求是我們可以設定@transient表示透明的當設定此屬性是在建立資料庫是可以對此屬性忽略,在本例中模擬了一個班級表表名為MyClass 屬性有資料庫id 班級名稱 班級老師 老師

資料庫中某個表中的某個逗號隔開的多個,根據逗號拆分並從另一個表中查出資料返回

有兩個表A,B,表結構如下: A表 B表 關聯關係說明如下: (1)A.hospital_catalog=B.id (2)A表中hospital_catalog欄位的值是以 逗號 “,” 隔開,且兩邊用中括號“[ ]”包起,

一句sql語句更新兩個表並可更新對應的

ACCESS 例子: insert into products (ProNumber,CASNumber,Cnname,Price,Enname,Baozhuang,Pinpai) select ProNumber,CASNumber,Cnname,Price,Enname,Baozhuan

Qt中SQL語句update同時更新多設定為空的方法

Qt中往往需要對資料庫進行操作,常出現根據某變數更改相關欄位的內容。一般地,可以採用名稱繫結和位置繫結兩種方法。 本文以update舉例,其他insert等語句操作類似。 方法一:名稱繫結 已知:定義Qstring型別變數a b c d e f g h。

MySql 設定區分大小寫

MySql在Linux下,資料庫名、表名、列名、別名大小寫規則是這樣的: 1. 資料庫名和表名是嚴格區分大小寫的 2. 表的別名嚴格區分小大寫 3. 列名與列的別名在所有情況下均是忽略小大寫的 4. 變數名也是嚴格區分大小寫的 MySql在windows下都不區分大小寫 但

Hibernate註解對映的位置到底應該放在屬性還是方法上

現在我們對於專案中大量使用@Entity註冊在類頭上,將一個類宣告為一個實體bean(即一個持久化POJO類) ,@Table註冊在類頭上,註解聲明瞭該實體bean對映指定的表,來體現實體與表的這種對映關係。 對於屬性欄位和表的欄位關係對應的註解屬性的位置,一般我們採用以下兩種方式: 第一種:

hibernate自動建表設定型別為資料庫中為timestamp型別

1:專案需要,欄位應該設計為timestamp型別,但自動建表後總是被設定為datetime(當時用的資料庫為sqlserver) Google後,在配置檔案(Xxx.hbm.xml)中column新增 sql-type="timestamp" default="CUR

查詢MDB中高程點的高程有0的圖幅(遊標遍歷查詢某個),並將查到的結果寫入到TXT中

1、 mdbs = arcpy.ListWorkspaces("*","Access") 2、 FeatureClasses = arcpy.ListFeatureClasses() 3、 Fields = arcpy.ListFields(FeatureClass) 4、 cursor =

SqlServer資料字典表替換某一表中某個

base_CompanyType為資料字典表,有ID和CompanyType兩列,如IDCompanyType1監理單位2勘察單位base_company_info 為替換目標表,companytypeid列可能有多個的CompanyType組合,用“,”隔開,如“監理單位,

oracle查詢一個表中的一個內容包含另一個表中的某個

select *   from table1 where exists (select 1           from table2          where table1.columA like '%' || table2.columB || '%')

Scapy解析TTL

#!/usr/bin/python #coding=utf-8 from scapy.all import * import time import optparse # 為避免IPy庫中的IP類與Scapy庫中的IP類衝突,重新命名為IPTEST類 from IPy i

sql語句寫成表頭

  Declare   @sql   varchar(8000)   set   @sql   =   'select  address 'select   @sql   =  @sql   + ', MAX(case  products  when   '''+ produ