hibernate设置mysql的timestamp默认值技巧

首先,要想使用数据库中配置的默认值就必须不让hibernate覆盖了默认值,需要配置property insert="false"
update="false",告诉hibernate不对该属性执行insert、update操作,这要就不会覆盖我们在数据库中配置的默认值了。除此之外,我们还需要配置hibernate对该表的操作,dynamic-insert="true"
dynamic-update="true",

实现动态的向数据库中插入值,只insert,update非空的属性值,对于NULL的属性值不插入数据库,这要就可以避免NULL覆盖数据库表中设置的默认值。


 1 <class name="com.tea.lms.model.UserCourse" table="t_user_course"
2 catalog="lms" lazy="false" dynamic-insert="true" dynamic-update="true">
3 <!-- 这里设置dynamic-insert="true" dynamic-update="true" 是hibernate在插入数据时只会插入非NULL值,空值不会插入数据库中 -->
4 <id name="id" type="long">
5 <column name="id" not-null="true" length="20"></column>
6 <generator class="native"></generator>
7 </id>
8 <many-to-one name="user" class="acc.model.User" cascade="delete"
9 lazy="false">
10 <column name="user_id"></column>
11 </many-to-one>
12 <many-to-one name="course" class="com.tea.lms.model.Course"
13 cascade="delete" lazy="false">
14 <column name="course_id"></column>
15 </many-to-one>
16 <many-to-one name="lastUserItem" class="com.tea.lms.model.UserItem"
17 cascade="all" lazy="false">
18 <column name="last_user_sco_id"></column>
19 </many-to-one>
20 <property name="regTime" not-null="true" type="timestamp"
21 insert="false" update="false"> <!-- java类型,insert、update都设置为false,使hibernate不会覆盖默认值 -->
22 <column name="reg_time"></column>
23 <type name="timestamp"></type> <!-- sql类型 -->
24 </property>
25 <property name="score" type="int">
26 <column name="score" length="11"></column>
27 </property>
28 <property name="pass" type="int">
29 <column name="pass" length="11"></column>
30 </property>
31 </class>

hibernate配置好后还没有完,我们还需在mysql中相关配置,处理配置timestamp列的默认值为CURRENT_TIMESTAMP还不行。由于mysql新版本中对默认值的插入进行了新规定,只有当当前列约束非空,并且没有插入值时才采用默认值进行插入。所有我们还需要配置timestamp列约束NOT NULL

完工。

hibernate设置mysql的timestamp默认值技巧,布布扣,bubuko.com

时间: 2024-10-21 14:56:45

hibernate设置mysql的timestamp默认值技巧的相关文章

MySQL datetime数据类型设置当前时间为默认值

环境:MySQL Sever 5.1 + MySQL命令行工具 问题:MySQL datetime数据类型设置当前时间为默认值 解决: 方法一: 由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的.代替的方案是使用TIMESTAMP类型代替DATETIME类型. TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作.如果有多个TIMESTAMP列,只有第一个自动更新. 自

数据库字段设置为&lt;非空&gt;&lt;默认值&gt;

为什么数据库要设置默认值呢?因为我们希望在插入数据时,有意或无意间被忽略的字段能够交由MySQL按我们事先预想的方式处理,例如一些默认正常状态码.用户插入数据时候尚未设置的文本字段,诸如此类. 假设student表里有一个字段score被设置为<非空><默认值>,插入一条数据记录时,score字段值为空<''>,那这时score的字段值为<''>还是<默认值>? 设置默认值的作用只有在忽略了字段时才会发挥作用.何为忽略了字段,就是在写SQL插入语

解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错

解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错 学习了:https://www.cnblogs.com/cnhkzyy/p/9119339.html set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 用mysql dump方式好像可以通过

解决:mysql timestamp默认值0000-00-00 00:00:00 报错

一. 问题的引出 我们在用mysql5.7创建表时,如果把timestamp(时间戳)的默认值设置为0000-00-00 00:00:00 的形式,将会产生一条报错: `RepaymentDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '回款日期', 报错信息如下: [Err] 1067 - Invalid default value for 'RepaymentDate' 二. 找出原因 这个问题和mysql中sql

HTML input文本框设置和移除默认值

这里想实现的效果是:设置和移除文本框默认值,如下图鼠标放到文本框中的时候,灰字消失. 1.可以用简单的方式,就是给input文本框加上onfocus属性,如下代码: <input id="keyword" name="keyword" size="10" class="inputstyle keywords" value="请输入关键字进行搜索" onfocus='if(this.value==&qu

ajaxSetup设置Ajax请求的默认值

ajaxSetup() 方法为将来的 AJAX 请求设置默认值.语法$.ajaxSetup({name:value, name:value, ... }) 该参数为带有一个或多个名称/值对的 AJAX 请求规定设置.下面的表格中列出了可能的名称/值:名称 值/描述async 布尔值,表示请求是否异步处理.默认是 true.beforeSend(xhr) 发送请求前运行的函数.cache 布尔值,表示浏览器是否缓存被请求页面.默认是 true.complete(xhr,status) 请求完成时运

input文本框设置和移除默认值

这里想实现的效果是:设置和移除文本框默认值,如下图鼠标放到文本框中的时候,灰字消失. 1.可以用简单的方式,就是给input文本框加上onfocus属性,如下代码: [html] view plain copy <input id="keyword" name="keyword" size="10" class="inputstyle keywords" value="请输入关键字进行搜索" onfo

JIRA中设置[描述]字段的默认值

公司使用JIRA已经一段时间了,期间也是各种需求,免不了很多自定义的功能或需求,在没有购买技术支持的情况下,有的或许可以自行尝试实现,有的也只能是无能为力.当然,这篇文章别的不说,单说设置描述description字段的默认值的实现方式. 所需要设置默认值的字段就是上图中红框的描述字段,这里是汉化后的界面,如果是未汉化此处应为description,我要实现的就是右侧方框中自动出现我设置的格式,也即只要用户创建一个问题,在弹出的窗口中就会自动出现我定义的描述默认值. 1.备份源文件 要修改的文件

设置DataGridViewComboBoxColumn列的默认值

因为工作需要,最近用到了DataGridViewComboBoxColumn,需要让它在DataGridView中显示时包含默认值.在网上查找过相关资料,对于我这种新手来说理解起来仍是困难,索性自己动手写了一个测试程序,若有说的不对的地方欢迎拍砖:-). DataGridViewComboBoxColumn列用于在DataGridView单元格中实现具有类似ComboBox的功能,就是可以从下拉框中选择需要显示在单元格中的内容.在设置默认值的时候,有两种情况:一是DataGridView显示时已