2016.02工作日志

二月,总体展望:

      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工作日志_第1张图片

 

2016.02.02

1继承关系,每个类映射为一张表

你可能感兴趣的:(2016.02工作日志)