多对多manytomany

Posted 曙光城邦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多对多manytomany相关的知识,希望对你有一定的参考价值。

----------------------多对多manytomany
要点:
多对多必须有mappedBy,让一个端维护关系
多对多会创建一张关系表,维护关系就是维护第三张表。
所以增加关系,则在集合中添加实体。删除关系,则从集合中删除实体。

mappedBy使一方丧失关系维护


@Entity
public class User {

    @Id
    @GeneratedValue
    private long id;
    
    @Column(name="name")
    private String name;
    
    @ManyToMany(cascade=CascadeType.PERSIST,mappedBy="users")
    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;
} 

删除用户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);//执行失败,关系它不维护
            }
        }

 

以上是关于多对多manytomany的主要内容,如果未能解决你的问题,请参考以下文章

关系/对象映射 多对多关系(@ManyToMany 注释)重新认识

Hibernate - 从多对多关系访问字段

JPA多对多

laravel hasmanythrough on manytomany

多对多查询 jpql

首先创建代码,多对多,关联表中的附加字段