问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate 修改数据时候怎么让默认值生效

发布网友 发布时间:2022-04-09 15:00

我来回答

2个回答

懂视网 时间:2022-04-09 19:22

@Component("taskJob") 2 public class TaskJob extends HibernateDaoSupport { 3 4 @Resource 5 private SessionFactory sessionFactory; 6 7 @PostConstruct 8 public void init() { 9 setSessionFactory(sessionFactory); 10 } 11 12 @Scheduled(cron = "0 0/1 * * * ?") 13 @Transactional 14 public void jobl() throws InterruptedException { 15 System.out.println("任务开始执行...."); 16 this.getHibernateTemplate().execute(new HibernateCallback() { 17 18 public Object doInHibernate(Session session) 19 throws HibernateException { 20 session.createSQLQuery("truncate table tm_org").executeUpdate(); 21 return null; 22 } 23 }); 24 System.out.println("删除完毕........"); 25 Thread.sleep(1000); 26 final File file = new File("C:\Users\lhq\Desktop\T1018.txt"); 27 BufferedReader reader = null; 28 try { 29 System.out.println("以行为单位读取文件内容,一次读一整行:"); 30 reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); 31 String tempString = null; 32 // 一次读入一行,直到读入null为文件结束 33 while ((tempString = reader.readLine()) != null) { 34 final String[] split = tempString.split("\s+"); 35 Org org = new Org(); 36 org.setOrgCode(split[0]); 37 org.setOrgName(split[1]); 38 // org.setStatus("0"); 39 if (split.length>3) { 40 org.setUpOrg(split[3]); 41 } 42 org.setCreator("superuser"); 43 this.getHibernateTemplate().persist(org); 44 45 } 46 reader.close(); 47 48 } catch (final IOException e) { 49 e.printStackTrace(); 50 } finally { 51 if (reader != null) { 52 try { 53 reader.close(); 54 } catch (final IOException e) { 55 } 56 } 57 } 58 } 59 }

最开始执行完操作的时候,技术分享这一行是没有的,因为我在数据库中设置了默认值,

控制台上就给我报错,如图:

技术分享

为了程序的运行,我把这行手动添加上了,今天仔细一想,应该有办法解决这个问题,就上网找了N多个文字,都没有具体找到实现方法,大多都是配置文件形式的(这年头谁还用配置文件,都用注解了),后来千辛万苦找到一个解决方案,如图:

技术分享

于是我就照葫芦画瓢,也这么写,然后发现是这样的:

技术分享

一看就知道是过时的方法,为了程序的执行没有管他,run起来也没有问题,之后我又看了一下源码发现4.1版本的时候移除了:

技术分享

然后我发现这里面每个字段上有这么一句:

技术分享

意思就是用{}里面的替换了,于是就改成了这样:

技术分享

当然也是没问题。

就是跟大家分享一下经验,帮助需要的人提供方案.

 

小学生之Hibernate插入数据修改数据使用数据库默认值的实现

标签:res   开始   exec   技术分享   resource   creates   方案   tor   length   

热心网友 时间:2022-04-09 16:30

解决方法: 在hibernate映射文件对数据库表的描述中,在当前字段处加入insert="false"语句,这时hibernate在进行插入操作时,只会为那些有实值的字段赋值,而值为空白的字段就会使用数据库表中定义的默认值了。
举例说明,表person:

CREATE TABLE address ( i_id int(11) NOT NULL auto_increment, c_address varchar(100) NOT NULL default '中国', PRIMARY KEY (id))address.hbm.xml:<hibernate-mapping package="cn.com.lough.model"> <class name="address " table="address " lazy="false" > <meta attribute="sync-DAO">true</meta> <cache usage="read-write"/> <id name="IId" type="integer" column="i_id" > <generator class="native"/> </id> <property name="C_Address" column="c_address " type="string" not-null="false" length="128" /></hibernate-mapping>运行程序public regAddress(String a){ //传入的值a未在网页文本框里获得任何值(家庭地址)Address p = new Address ();p.setAddress(a);HiFactory.save(p);}此时hibernate生成的sql语句为insert into person(c_address) values('');数据库表结果为i_id c_address1 null修改address.hbm.xml为:<hibernate-mapping package="cn.com.lough.model"> <class name="Address" table="address" lazy="false" > <meta attribute="sync-DAO">true</meta> <cache usage="read-write"/> <id name="IId" type="integer" column="i_id" > <generator class="native"/> </id> <property name="C_Address" column="c_address" type="string" not-null="false" length="128" insert="false" /></hibernate-mapping>再次运行程序,此时hibernate生成的sql语句为 insert into address() values();
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
夫妻养狗狗把谁当主人 两人同养狗认谁当主人 什么蔬菜和水果可以美容祛斑呢? vivox60怎么查看参数配置详情 怎样查看vivo手机的屏幕参数? vivo手机怎么看手机参数 vi##手机怎么看配置? 义乌到湖州没有直达快客???必须到南浔?? 湖州到绍兴的汽车有几班? 注销驾考需要本人吗 ps里的字体做成弧形后怎么把字加大加粗? vivoy67和vivoy67l有什么区别?有什么影响吗? 合肥地区对肥西县干部退休金是否加半年工资今年什么时间发? 2022年退休在合肥退休在池州退休有区别吗 合肥挂靠公司交社保退休后能拿多少钱? 2022年合肥市3月份退休工资工商银行几号到帐 你好,我现在交养老保险,每年交12000元,交15年,到退休年龄,每月可以领多少 合肥交19.5年社保退休拿多少钱__ 合肥2022年2月退休按哪年社平 合肥男女法定退休年龄多少岁,合肥延迟退休年龄最新 fiverr在电脑上能登录在手机不能登录是为什么? 姐妹那个手机版的fiverr怎么注册? 中国驰名商标禁用的原因是什么 国窖1573的商标为什么可以带国字 商标中不能使用哪些文字图形? 我国法律规定商标不得使用哪些文字、图形: 为什么“国酒茅台”商标注册不了呢? 带“国学”两个字可以进行商标注册吗?譬如“XX国学”,“国学”两个字有没有明文规定不允许注册呢? 商标注册:商标中不能包含“国际”这样的词么?还有“博览会”这样的词是不是有*,要放弃使用权 申请注册的商标中可否带有国家名称 名侦探柯南大电影有哪些? 微信账号被盗,密码都被改了,怎么找回? 柯南电影有哪些 名侦探柯南共有几部电影?分别是什么名字? 名侦探柯南有哪些电影 名侦探柯南剧场版有几部? 分别叫什么名字? 修改忘记原密码怎么办 柯南电影有哪些?全部列出来 名侦探柯南电影有哪些 关于名侦探柯南精彩电影有哪些? 名侦探柯南的所有电影 广东连州市6月28曰当时O号柴油多少钱一升连州市6月28日那天0号柴油多少钱一升_百度问一问 广东省0号柴油价格查询2018,7,280号柴油零售价是多少? 08年12月份广东0#柴油几钱一吨! 人防办的职责是什么 人防部门是干什么的 快餐车加热管怎么安装视频? 荣耀8xmax,有时出差不够用电,不想带移动电源,为之奈何? 方的多音字组词 如何写纠纷协议书?