Hibernate使用JPA实现多对多配置

来源:互联网 发布:阿里大于发送短信php 编辑:程序博客网 时间:2024/06/10 17:15

在多对多中其实和一对多大部分一致,只是在两边的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"这句就相当于去掉了外键维护

别的属性在代码中都有注释,按照上面代码改就可以了

上面一些没有注释的在之前的文章中有解释,在这里就不啰嗦了







原创粉丝点击