Hibernate多对多操作
发布日期:2021-05-07 02:39:51 浏览次数:31 分类:精选文章

本文共 5869 字,大约阅读时间需要 19 分钟。

文章目录

1:多对多映射配置

以用户和角色为例

第一步:创建实体类,用户和角色

第二步:让两个实体类之间互相表示

(1)一个用户里面表示所有角色。使用set集合

(2) 一个角色有多个用户,使用set集合

User.java

package hibernate.manytomany;import java.util.HashSet;import java.util.Set;public class User {   		private Integer user_id;//用户id	private String user_name;//用户名称	private String user_password;//用户密码	private Set
setuser=new HashSet
(); public Integer getUser_id() { return user_id; } public void setUser_id(Integer user_id) { this.user_id = user_id; } public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; } public String getUser_password() { return user_password; } public void setUser_password(String user_password) { this.user_password = user_password; } public Set
getSet() { return setuser; } public void setSet(Set
set) { this.setuser = set; }}

Role.java

package hibernate.manytomany;import java.util.HashSet;import java.util.Set;public class Role {   		private Integer role_id;//角色id	private String role_name;//角色名称	private String role_description;//角色描述	private Set
setrole=new HashSet
(); public Integer getRole_id() { return role_id; } public void setRole_id(Integer role_id) { this.role_id = role_id; } public String getRole_name() { return role_name; } public void setRole_name(String role_name) { this.role_name = role_name; } public String getRole_description() { return role_description; } public void setRole_description(String role_description) { this.role_description = role_description; } public Set
getSet1() { return setrole; } public void setSet1(Set
set1) { this.setrole = set1; }}

第三步:配置映射关系

(1)基本配置

(2)配置多对多关系

  • 在用户里面表示所有角色,使用set标签
  • 在角色里面表示所有用户,使用set标签

role.hbm.xml部分代码片段

user.hbm.xml部分代码片段

第四步:在核心配置文件中引入映射文件

hibernate.cfg.xml

com.mysql.jdbc.Driver
jdbc:mysql:///mysql_studying
root
zlj18059008512
true
true
update
org.hibernate.dialect.MySQLDialect
Thread

2:多对多级联保存(重点)

问题:根据用户保存角色

第一步:在用户配置文件中,使用set标签里的cascade属性进行配置,cascade="save-update"

user.hbm.xml部分代码片段

第二步:写代码实现

(1)创建用户和角色对象。把角色收到用户里面。最终保存用户就可以了。

@Test	//演示多对多操作(级联保存)	public void testSave() {   				Configuration configuration=new Configuration();		SessionFactory sessionFactory=null;		Session session=null;		Transaction transaction=null;				try {   						configuration.configure();			sessionFactory=HibernateUtilities.getSessionFactory();			session=HibernateUtilities.getSessionObject();			transaction=session.beginTransaction();						//添加两个用户,为每个用户添加两个角色			//1:创建对象			User user1=new User();			User user2=new User();						user1.setUser_id(1);			user1.setUser_name("zlj");			user1.setUser_password("123456");			user2.setUser_id(2);			user2.setUser_name("zl");			user2.setUser_password("12345");						Role role1=new Role();			Role role2=new Role();			Role role3=new Role();						role1.setRole_id(1);			role1.setRole_description("开车");			role1.setRole_name("司机");			role2.setRole_id(2);			role2.setRole_description("打扫");			role2.setRole_name("保洁");			role3.setRole_id(3);			role3.setRole_description("保卫");			role3.setRole_name("保安");						//2:建立关系把角色放到用户里			user1.getSet().add(role1);			user1.getSet().add(role2);			user2.getSet().add(role3);			user2.getSet().add(role2);						//3:保存用户			session.save(user2);			session.save(user1);			transaction.commit();		} catch (Exception e) {   			transaction.rollback();					}finally {   						session.close();			sessionFactory.close();					}			}

3:多对多级删除

//演示多对多操作(级联删除)		public void testDelete() {   						Configuration configuration=new Configuration();			SessionFactory sessionFactory=null;			Session session=null;			Transaction transaction=null;						try {   								configuration.configure();				sessionFactory=HibernateUtilities.getSessionFactory();				session=HibernateUtilities.getSessionObject();				transaction=session.beginTransaction();								User user=session.get(User.class, 1);								session.delete(user);				transaction.commit();			} catch (Exception e) {   				transaction.rollback();							}finally {   								session.close();				sessionFactory.close();							}					}

4:维护第三张表

//演示多对多操作(维护第三张表)			public void testMaintain() {   								Configuration configuration=new Configuration();				SessionFactory sessionFactory=null;				Session session=null;				Transaction transaction=null;								try {   										configuration.configure();					sessionFactory=HibernateUtilities.getSessionFactory();					session=HibernateUtilities.getSessionObject();					transaction=session.beginTransaction();										//演示让某个用户拥有某个角色					//1:查询指定用户和角色					User user=session.get(User.class, 1);					Role role=session.get(Role.class, 1);										//2:把角色放到指定用户里					user.getSet().add(role);										/**演示让某个用户不拥有某个角色					//1:查询指定用户和角色					User user=session.get(User.class, 1);					Role role=session.get(Role.class, 1);										//2:把角色放到指定用户里,然后移除					user.getSet().remove(role);*/										transaction.commit();				} catch (Exception e) {   					transaction.rollback();									}finally {   										session.close();					sessionFactory.close();									}							}
上一篇:Hibernate的查询方式——(1)查询方式分类
下一篇:Hibernate一对多操作

发表评论

最新留言

很好
[***.229.124.182]2025年04月18日 20时28分54秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章