@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