hibernate当中多对多基本增删查改

首先我们来举一个很简单的例子来表示多对多的关系
截图

因此我们只要建两个表一个是teacher表一个是student表
这两者对于彼此来捉都是多对多色形式因此这两者的实体类当中都有一个set集合来表示对方

接下来就是实体类的映射文件生成方式前面的文章有,然后要改的就是这两者的主键生成方式都是native(自动增长)
还有就是set当中有所不同
在teacher的实体映射文件当中set属性以及多对多配置

//table老师表以及学生表的第三方表关系表tea_stu 哪个为主哪个级联,
//哪个多哪个维护关系因此teacher级连而student维护关系
// <column name="tid" />在table="tea_stu"中sid已知想要知道他的老师是谁则是要根据tid
//来获取该学生所对应的老师因此<column name="tid" />里的name写tid;
<set name="students" table="tea_stu" inverse="true" cascade="all" >
            <key>
                <column name="tid" />
            </key>
           <many-to-many class="com.hlp.entity.Student" column="sid"></many-to-many>
        </set>

学生实体映射文件当中set属性以及多对多配置

//table老师表以及学生表的第三方表关系表tea_stu 
// <column name="sid" />当中老师是如何知道自己的学生是谁的,老师则是要根据学生id来进行查找
//因此里面的name写学生id
<set name="teachers" table="tea_stu">
            <key>
                <column name="sid" />
            </key>
            <many-to-many class="com.hlp.entity.Teacher" column="tid"></many-to-many>
        </set>

多对多的增删查改

private SessionFactory factory;
	private Session session;
	private Transaction transaction;

	@Before
	public void before() {
		Configuration configuration = new Configuration().configure();
		factory = configuration.buildSessionFactory();
		session = factory.openSession();
		transaction = session.beginTransaction();
	}
	
	//@Test
	public void add() {
	//增
		Teacher t=new Teacher("小小");
		Teacher t1=new Teacher("猪猪");
		Teacher t2=new Teacher("大大");
	    Student s=new Student("anny");
	    Student s1=new Student("sarry");
	    Student s2=new Student("hanny");
	    t.getStudents().add(s);
	    t1.getStudents().add(s1);
	    t2.getStudents().add(s2);
	    s.getTeachers().add(t);
	    s1.getTeachers().add(t1);
	    s2.getTeachers().add(t2);
	    session.save(t);
	    session.save(t1);
	    session.save(t2);
		
	}
	
	//@Test
	public void Select() {
	//查询
		List<Teacher> teachers = session.createQuery("from Teacher").list();
		for (Teacher t : teachers) {
			System.out.println(t.getTname());
			Set<Student> students = t.getStudents();
			for (Student s : students) {
				System.out.println(s.getSname());
			}
		}
	}
	
	//@Test
	public void delete() {
	//删除
		Teacher teacher = session.get(Teacher.class, 5);
		session.delete(teacher);
	}
	
	@Test
	public void update() {
		
		//修改老师
//		Teacher teacher=session.get(Teacher.class, 6);
//	    teacher.setTname("多多");
		//修改学生
		Student student=session.get(Student.class, 6);
		student.setSname("补补");
	    
	}
	@After
	public void after() {
		transaction.commit();
		session.close();
		factory.close();
	}

这是一个比较简单的一个关系图根据以上思维便能把一下的关系用增删改写出来
在这里插入图片描述
我这里只写一个增加

private SessionFactory factory;
	private Session session;
	private Transaction transaction;

	@Before
	public void before() {
		Configuration configuration=new Configuration().configure();
		factory = configuration.buildSessionFactory();
		session = factory.openSession();
		transaction = session.beginTransaction();
	}
	
	@Test
	public void test() {
		//先给users创建对象分别给他们赋值
		Users users=new Users("admin");
	    Users users2=new Users("小小");
	    //给类型赋值
	    UserType uType=new UserType("管理员");
	    UserType uType1=new UserType("商家");
	    UserType uType2=new UserType("用户");
	    //给权限赋值
	    Power power=new Power("增加");
	    Power power1=new Power("删除");
	    Power power2=new Power("修改");
	    Power power3=new Power("查询");
	    Power power4=new Power("开店");
	    //先给第一个用户的用户类型设为管理员
	    users.getUserTypes().add(uType);
	    //根据互设在用户给该用户定义类型时,该类型也要设置它的类型之下有哪些人
	    uType.getUsers().add(users);
	    //有了该类型则要有该类型中所拥有的什么权限
	    uType.getPowers().add(power);
	    uType.getPowers().add(power1);
	    uType.getPowers().add(power2);
	    uType.getPowers().add(power3);
	    uType.getPowers().add(power4);
	   //该权限当中同时要知道该权限下针对哪些用户类型打开权限
	    power.getUserTypes().add(uType);
	    power1.getUserTypes().add(uType);
	    power2.getUserTypes().add(uType);
	    power3.getUserTypes().add(uType);
	    power4.getUserTypes().add(uType);
	    
	    
	    
	    //先给第一个用户的用户类型设为商家同时也是用户
	    users2.getUserTypes().add(uType1);
	    users2.getUserTypes().add(uType2);
	  //根据互设在用户给该用户定义类型时,该类型也要设置它的类型之下有哪些人
	    uType1.getUsers().add(users2);
	    uType2.getUsers().add(users2);
	    uType1.getPowers().add(power);
	    uType1.getPowers().add(power4);
	    uType2.getPowers().add(power3);
	    //该权限当中同时要知道该权限下针对哪些用户类型打开权限
	    power.getUserTypes().add(uType1);
	    power3.getUserTypes().add(uType2);
	    power4.getUserTypes().add(uType1);
	    session.save(users);
	    session.save(users2);
	    session.save(uType);
	    session.save(uType1);
	    session.save(uType2);
	    
		
	}
	@After 
	public void after() {
		transaction.commit();
		session.close();
		factory.close();
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值