Hibernate使用JPA实现多对多配置
程序员文章站
2022-03-02 15:31:19
...
在多对多中其实和一对多大部分一致,只是在两边的JavaBean中加入Set集合,
并为Set集合添加注解,以下JavaBean省略set和get方法
@Entity
@Table(name="t_user")
public class User {
@Id
@Column(name="u_id")
@GenericGenerator(name="mygenerator",strategy="native")
@GeneratedValue(generator="mygenerator")
private Integer uid;
@Column(name="u_name")
private String uname;
/*
* 多对多
*/
@ManyToMany(
targetEntity=Role.class, // 关联的另一方
cascade={ //配置级联操作
CascadeType.PERSIST, //级联保存
CascadeType.MERGE //级联更新
}
)
@JoinTable(name="t_user_role", //中间表名
joinColumns={ //没有放弃外键的一方
@JoinColumn(
name="u_id", //中间表的字段名
referencedColumnName="u_id" //自己的表的主键名
)
},
inverseJoinColumns={ //放弃外键维护的一方
@JoinColumn(
name="r_id", //中间表的对应自己的外键名
referencedColumnName="r_id" //自己表的主键名
)
}
)
private Set<Role> roles = new HashSet<Role>();
}
@Entity
@Table(name="t_role")
public class Role {
@Id
@Column(name="r_id")
@GenericGenerator(name="mygenerator",strategy="native")
@GeneratedValue(generator="mygenerator")
private Integer rid;
@Column(name="r_name")
private String rname;
/*
* 多对多
*/
@ManyToMany(
targetEntity=User.class, //目标对象,关联的另一方
mappedBy="roles" //放弃外键维护
)
private Set<User> users = new HashSet<User>();
}
重点看@ManyToMany注解。
这里两边都配置了@ManyToMany但是为什么两边配置的属性不一样呢,
在这里一边是用户一边是角色,以前在之前的配置文件式的多对多中说过,在多对多中必须有一方要放弃外键维护,否则会报主键重复异常
在这里就是把角色的外键维护去掉了,理由是操作少的一方取消外键维护,在这里我就把角色的权利去掉了,怎么去掉的呢,mappedBy="roles"这句就相当于去掉了外键维护
别的属性在代码中都有注释,按照上面代码改就可以了
上面一些没有注释的在之前的文章中有解释,在这里就不啰嗦了