Hibernate第三天

来源:互联网 发布:免费横道图绘制软件 编辑:程序博客网 时间:2024/06/06 07:45

学习了两天的hibernate不知道对你是否有很大的帮助今天是学习hibernate的最后一天,接下来我就要开始做一些实战项目,今天的主要的内容就是学习一下关于hibernate中的级联操作
首先我们先来了解一下hibernate中的级联操作
级联操作:casecade
save-update:级联保存更新
delete:级联删除 比如删除客户也可以把联系人删除
all:save-update+delete :级联删除和级联保存
级联操作好处:简化操作,少些代码
结论:简化操作。一定要用的话,一般用save-update 不建议使用delete,级联删除很危险。
举例:进行级联删除的例子
// 测试删除客户时候,级联删除客户一下的联系人**
一般在级联的时候我们有如下两种情况
一:一对多(多对一)
一对多一般会在如下两湖总情况下体现
1.实体类中一对多中的“一”
“`
private Set linkMens = new HashSet();

    2.实体类中“多”的一方如下
private Customer customer;
    3.一对多在orm 映射文件应该如下写![这里写图片描述](http://img.blog.csdn.net/20170428161858167?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5pcXVld2VpbWVpanVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)4.多对一orm映射文件应该这样写![这里写图片描述](http://img.blog.csdn.net/20170428162342077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5pcXVld2VpbWVpanVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)    二:多对多    1.多对多中实体文件这样写
private Set<Role> roles=new HashSet<Role>();
2.多对多中另个多也应该这样写

private Set user=new HashSet();

3.多对多的orm映射配置文件![这里写图片描述](http://img.blog.csdn.net/20170428162833580?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5pcXVld2VpbWVpanVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)4.另一个orm映射配置文件![这里写图片描述](http://img.blog.csdn.net/20170428163009284?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5pcXVld2VpbWVpanVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)注意多对多是两个操作一个表一般情况只有一个inverse属性设置为true。都设置为true就报主键冲突,因为这两个是共同操作第三个表。多对多表在实际应用中的java语法测试

package com.hibernate.many2many.test;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import com.hibernate.test.domain.Role;
import com.hibernate.test.domain.User;
import com.hibernate.utils.HibnerateUtils;

//多对多关系操作
public class Demo {

// 保存员工以及角色@Testpublic void demo3() {    // 获取session    Session session = HibnerateUtils.opensession();    // 开启事务    Transaction transaction = session.beginTransaction();    // 执行操作    // -------------------------------------------------    // 1.创建两个User    User u1 = new User();    u1.setUser_name("张明三");    User u2 = new User();    u2.setUser_name("金假的");    // 2.创建两个Role    Role r1 = new Role();    r1.setRole_name("保洁");    Role r2 = new Role();    r2.setRole_name("保安");    // 3.用户表达关系    u1.getRoles().add(r1);    u1.getRoles().add(r2);    u2.getRoles().add(r1);    u2.getRoles().add(r2);    // 4.角色表达关系    r1.getUser().add(u1);    r1.getUser().add(u2);    r2.getUser().add(u1);    r2.getUser().add(u2);    // 5.调用save方法依次保存    session.save(u2);    session.save(u1);    session.save(r1);    session.save(r2);    // ----------------------------------------------    // 提交事务    transaction.commit();    // 关闭资源    session.close();}// 为张明三添加角色@Testpublic void demo4() {    // 获取session    Session session = HibnerateUtils.opensession();    // 开启事务    Transaction transaction = session.beginTransaction();    // 执行操作    // -------------------------------------------------    // 1.获取张明三用户    User u = session.get(User.class, 2l);    // 2.创建公关角色    Role r = new Role();    r.setRole_name("公关");    // 3.将角色添加到user对象中    u.getRoles().add(r);    // 由于我们在Customer.hbm.xml文件中使用了级联:casecade:save-update 所以下边一行代码可以设舍弃    // session.save(r);    // ----------------------------------------------    // 提交事务    transaction.commit();    // 关闭资源    session.close();}// 为张明三解除一个角色@Testpublic void demo5() {    // 获取session    Session session = HibnerateUtils.opensession();    // 开启事务    Transaction transaction = session.beginTransaction();    // 执行操作    // -------------------------------------------------    // 1.获取张明三用户    User u = session.get(User.class, 2l);    // 2.获取要操作的角色对象    Role role = session.get(Role.class, 1l);    Role role2 = session.get(Role.class, 2l);    // 3.将角色从用户的角色集合中移除    u.getRoles().remove(role2);    u.getRoles().remove(role);    // ----------------------------------------------    // 提交事务    transaction.commit();    // 关闭资源    session.close();}

}

“`

0 0