二月,总体展望:
1,20日旭日行动结束。找工作。
2,需以巩固java web基础为重,spring+hibernate为主。
3,尽己所能,学习java web实用/先进技术。
4,业余时间继续学习,算法,linux。
5,开始写作之实践。
2016.02.01
今日小年,亲戚相聚,然甚感情谊淡泊,无话可谈。
近日再读《三国》,常为罗之文笔之精彩而拍案。
1,hibernate级联操作,cascade。
2,hibernate inverse用法。
我的一些理解:
inverse只能用在集合中。一对多,多对多。cascade都可以用。
depart与employee是双向一对多关系 在不设置inverse的情况下,执行如下语句
Department depart = new Department();
depart.setName("depart name");
Employee emp1 = new Employee();
emp1.setDepart(depart);// 对象模型:建立两个对象的关联
emp1.setName("emp name1");
Employee emp2 = new Employee();
emp2.setDepart(depart);// 对象模型:建立两个对象的关联
emp2.setName("emp name2");
Set<Employee> emps = new HashSet<Employee>();
emps.add(emp1);
emps.add(emp2);
depart.setEmps(emps);
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(emp1);
s.save(emp2);
s.save(depart);
System.out.println("----------");
tx.commit();
其中
s.save(emp1);
s.save(emp2);
s.save(depart);
的语句等于级联操作
控制台会输出四条update语句:
Hibernate: insert into Employee (name, depart_id, id) values (?, ?, ?)
Hibernate: insert into Employee (name, depart_id, id) values (?, ?, ?)
Hibernate: insert into Department (name) values (?)
----------
Hibernate: update Employee set name=?, depart_id=? where id=?
Hibernate: update Employee set name=?, depart_id=? where id=?
Hibernate: update Employee set depart_id=? where id=?
Hibernate: update Employee set depart_id=? where id=?
这样是效率不高的。
所以一般在"多对一"的“一”的一方设置inverse = "true",表明在这方放弃关系维护
<set name="emps" inverse="true">
<key column="depart_id"/>
<one-to-many class="Employee" />
</set>
此时输出sql如下
Hibernate: insert into Employee (name, depart_id, id) values (?, ?, ?)
Hibernate: insert into Employee (name, depart_id, id) values (?, ?, ?)
Hibernate: insert into Department (name) values (?)
----------
Hibernate: update Employee set name=?, depart_id=? where id=?
Hibernate: update Employee set name=?, depart_id=? where id=?
2016.02.02
1继承关系,每个类映射为一张表