hibernate的list集合映射(与set区别)

ref:http://blog.csdn.net/longyuan20102011/article/details/7722693

主要区别

set没有顺序,也不允许重复。可以级联保存
 list可以允许重复,有次序。但没有级联一说,所以必须每个对象各自保存各自的


department中:

  <list name="employees">
<key column="depart_id"/>
<list-index column="order_col"/>  //会在employee中多出个字段
<one-to-many class="Employee"/>
</list>

java代码:

static void add() {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction();
//Department dep=(Department)session.get(Department.class, 1);

Department depart = new Department();
depart.setName("depart"+new Date().toLocaleString());


List emps = new ArrayList();
//Set emps = new HashSet();
Employee emp = new Employee();
emp.setName("emp name:jimmy "+new Date().toLocaleString());
emp.setAge(10);
emp.setDepart(depart);


Employee emp1 = new Employee();
emp1.setName("emp name:kaka"+new Date().toLocaleString());
emp1.setAge(10);


emp1.setDepart(depart);


emps.add(emp1);
emps.add(emp);

depart.setEmployees(emps);
session.save(emp);   
session.save(emp1);  //注意调试时候,这句和上句并没有输出sql语句
session.save(depart);  //注意调试时候,这句这句输出三句sql:

//insert into employees (name, age, depart_id, id) values (?, ?, ?, ?)
//insert into employees (name, age, depart_id, id) values (?, ?, ?, ?)
//insert into departments (name) values (?)

//*/

tx.commit();           //注意调试时候,这句这句输出四句sql:

//update employees set name=?, age=?, depart_id=? where id=?
//update employees set name=?, age=?, depart_id=? where id=?
//update employees set depart_id=?, order_col=? where id=?
//update employees set depart_id=?, order_col=? where id=?
} finally {

if (session != null)
session.close();
}
}

输出:

Hibernate: select next_hi from hibernate_unique_key for update
Hibernate: update hibernate_unique_key set next_hi = ? where next_hi = ?
Hibernate: insert into employees (name, age, depart_id, id) values (?, ?, ?, ?)
Hibernate: insert into employees (name, age, depart_id, id) values (?, ?, ?, ?)
Hibernate: insert into departments (name) values (?)
Hibernate: update employees set name=?, age=?, depart_id=? where id=?
Hibernate: update employees set name=?, age=?, depart_id=? where id=?
Hibernate: update employees set depart_id=?, order_col=? where id=?
Hibernate: update employees set depart_id=?, order_col=? where id=?

数据库:

id   name                                                      age depart_id  order_id

'1', 'emp name:jimmy 2015-8-20 12:19:18', '10',     '4',           '1'
'2', 'emp name:kaka  2015-8-20 12:19:18', '10',     '4',            '0'


问:如果没有 session.save(emp);    session.save(emp1);这两句会怎么样?

答:会报错,Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance,同时输出

Hibernate: insert into departments (name) values (?)
Hibernate: update employees set depart_id=?, order_col=? where id=?   //可见session.save(depart);是直接更新employees 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值