java鬼混笔记:Hibernate:5、多对多关联、多对多拆份两个一对多

这次的学习笔记是 hibernate的多对多关系设置,后面拆分成两个一对多。多对多常见到不能常见的是用户和角色的关系啦。。。项目都有用到,特别是统一身份认证系统(刚从学校出来做过统一身份认证时,有点无聊)。 一个用户可能有多个角色,比如学校的小明可以是普通学生,也可以是学生会组长,学生会组长也会是别人,普通学生角色别的同学也会有。总的来说,普通学生的角色中包含一群学生,一个学生也可能 有多个角色。不说了,直拉上代码,基本的多对多代码。


user.java

package com.ywj.TestHibernate.e;

import java.io.Serializable;
import java.util.Set;

public class User implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6277707106263340356L;

	private Long id;
	private String name;
	private Set role;// 多个角色
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Set getRole() {
		return role;
	}
	public void setRole(Set role) {
		this.role = role;
	}
}


User.hbm.xml





	

		
			
		

		

		
			
			
		
	

Role.java

package com.ywj.TestHibernate.e;

import java.io.Serializable;
import java.util.Set;

public class Role implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3207285849366951621L;

	private Long id;
	private String name;
	private Set user;// 多个用户
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Set getUser() {
		return user;
	}
	public void setUser(Set user) {
		this.user = user;
	}
}

Role.hbm.xml





	

		
			
		
		
		
			
			
		
	

Test.java

package com.ywj.TestHibernate.test;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.ywj.TestHibernate.e.User;
import com.ywj.TestHibernate.e.Role;


public class Test {

	public static void main(String[] args) {
		
		Session s = HibernateUtils.getCurrentSession();
		Transaction t  = null;
		
		try {
			
			t = s.beginTransaction();
			
			User u = new User();
			u.setName("u5");
			
			User u2 = new User();
			u2.setName("u6");
			
			Role r = new Role();
			r.setName("r5");
			
			Role r2 = new Role();
			r2.setName("r6");
			
			Set uSet = new HashSet();
			uSet.add(u);
			uSet.add(u2);
			
			r.setUser(uSet);
			r2.setUser(uSet);
			
			s.save(u);
			s.save(u2);
			s.save(r);
			s.save(r2);
			
			
			t.commit();
			// 查询
			/*Role role = (Role) s.load(Role.class, 1L);
			Set users = role.getUser();
			for(User u : users) {
				System.out.println(u.getId()+":"+u.getName());
			}*/
			
			
			//查询
			/*User u = (User) s.load(User.class, 1L);
			Set roles = u.getRole();
			for(Role r : roles) {
				System.out.println(r.getId()+":"+r.getName());
			}*/
			
		} catch (Exception e) {
			e.printStackTrace();
			t.rollback();
		} finally {
			s.close();
		}
		
	}

}

OK,,,完毕。

接下来把多对多拆分成一对多,拆分不般是hIibernate自动生成的 中间表字段不够用,不适合自定义字段,所以我们自己定义一个中间表UserRole.,要什么字段自己来(要什么菜自己挟), 上代码。。。


User.java

package com.ywj.TestHibernate.e;

import java.io.Serializable;
import java.util.Set;

public class User implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6277707106263340356L;

	private Long id;
	private String name;
	private Set userRole;

	public User() {}
	
	public User(String name) {
		this.name = name;
	}
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Set getUserRole() {
		return userRole;
	}

	public void setUserRole(Set userRole) {
		this.userRole = userRole;
	}

}

User.hbm.xml





	

		
			
		

		

		  
            
              
         
	

Role.java

package com.ywj.TestHibernate.e;

import java.io.Serializable;
import java.util.Set;

public class Role implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3207285849366951621L;

	private Long id;
	private String name;
	private Set userRole;

	public Role() {}
	
	public Role(String name) {
		this.name = name;
	}
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Set getUserRole() {
		return userRole;
	}

	public void setUserRole(Set userRole) {
		this.userRole = userRole;
	}

}

Role.hbm.xml





	

		
			
		
		
		  
            
              
         
	

UserRole.java

package com.ywj.TestHibernate.e;

import java.io.Serializable;
import java.util.Date;

public class UserRole implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3207285849366951621L;

	private Long id;
	private Date date;// 授权时间 ,有问题可以根据时间来查
	private User user;
	private Role role;

	public UserRole(User user, Role role) {
		this.user = user;
		this.role = role;
		this.date = new Date();
	}
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public Role getRole() {
		return role;
	}

	public void setRole(Role role) {
		this.role = role;
	}
}

UserRole.hbm.xml





	

		
			
		

		
		
		
		
	

Test.java

package com.ywj.TestHibernate.test;

import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.ywj.TestHibernate.e.User;
import com.ywj.TestHibernate.e.UserRole;

public class Test {

	public static void main(String[] args) {

		Session s = HibernateUtils.getCurrentSession();
		Transaction t = null;

		try {
		/*
			 * t = s.beginTransaction();
			 * 
			 * User u1 = new User("u1");
			 * 
			 * User u2 = new User("u2");
			 * 
			 * 
			 * 
			 * 
			 * Role r1 = new Role("r1");
			 * 
			 * 
			 * 
			 * 
			 * Role r2 = new Role("r2");
			 * 
			 * 
			 * 
			 * 
			 * UserRole ur1 = new UserRole(u1,r1);
			 * 
			 * UserRole ur2 = new UserRole(u1,r2);
			 * 
			 * 
			 * 
			 * 
			 * UserRole ur3 = new UserRole(u2,r1);
			 * 
			 * 
			 * 
			 * 
			 * UserRole ur4 = new UserRole(u2,r2);
			 * 
			 * 
			 * 
			 * 
			 * 
			 * s.save(u1); s.save(u2); s.save(r1); s.save(r2); s.save(ur1); s.save(ur2);
			 * s.save(ur3); s.save(ur4);
			 * 
			 * 
			 * t.commit();
			 */
			// 查询
			User u = (User) s.load(User.class, 3L);
			Set urs = u.getUserRole();
			for (UserRole ur : urs) {
				System.out.println(ur.getDate() + ":" + ur.getRole().getName());
			}

		} catch (Exception e) {
			e.printStackTrace();
			t.rollback();
		} finally {
			s.close();
		}

	}

}


ok...

你可能感兴趣的:(Hibernate)