zoukankan      html  css  js  c++  java
  • 多对多manytomany

    ----------------------多对多manytomany
    要点:
    多对多必须有mappedBy,让一个端维护关系
    多对多会创建一张关系表,维护关系就是维护第三张表。
    所以增加关系,则在集合中添加实体。删除关系,则从集合中删除实体。
    
    mappedBy使一方丧失关系维护
    
    
    @Entity
    public class User {
    
    	@Id
    	@GeneratedValue
    	private long id;
    	
    	@Column(name="name")
    	private String name;
    	
    	@ManyToMany(mappedBy="users")
    	@Cascade(value=CascadeType.SAVE_UPDATE)
    	private Set<Role> roles = new HashSet<Role>();
    }
    
    
    @Entity
    public class Role {
    	@Id
    	@GeneratedValue
    	private long id;
    	@Column
    	private String name;
    	@ManyToMany
    	private Set<User> users = new HashSet<User>();
    	public String getName() {
    		return name;
    } 
    
    --------------------------------保存mappedBy端
    		User user = new User();
            user.setName("zhangsan");
            User user2 = new User();
            user2.setName("lisi");
            
            Role r1= new Role();
            r1.setName("ADMIN");
            Role r2= new Role();
            r2.setName("EDITOR");
            
            user.getRoles().add(r1);
            user.getRoles().add(r2);
            user2.getRoles().add(r1);
            
            r1.getUsers().add(user);
            r1.getUsers().add(user2);
            r2.getUsers().add(user);
            
            session.save(user); 
            session.save(user2);
    
    结果:
    进行了级联保存。
    如果使用
    CascadeType.PERSIST注解
    @ManyToMany(cascade=CascadeType.PERSIST,mappedBy="users") 则需要调用session.persist方法进行保存。注意每个方法上都有支持的级联注解的说明!

    Hibernate: insert into User (name, id) values (?, ?) Hibernate: insert into Role (name, id) values (?, ?) Hibernate: insert into Role (name, id) values (?, ?) Hibernate: insert into User (name, id) values (?, ?) Hibernate: insert into Role_User (roles_id, users_id) values (?, ?) Hibernate: insert into Role_User (roles_id, users_id) values (?, ?) Hibernate: insert into Role_User (roles_id, users_id) values (?, ?) 删除用户139的ADMIN权限 User u = session.get(User.class,139L); Set<Role> roles = u.getRoles(); Iterator<Role> ites = roles.iterator(); while(ites.hasNext()) { Role r = ites.next(); if(r.getName().equals("ADMIN")){ r.getUsers().remove(u);//执行成功,删除关系,而不删除用户 //u.getRoles().remove(r);//执行失败,关系它不维护 } }

      

  • 相关阅读:
    BZOJ3156 防御准备
    BZOJ1911 [APIO2010] 特别行动队
    BZOJ1096 [ZJOI2007] 仓库建设
    HDU
    斜率优化的各种板子
    HDU
    HDU
    HDU
    HDU
    HDU
  • 原文地址:https://www.cnblogs.com/beenupper/p/6818715.html
Copyright © 2011-2022 走看看