hibernate多对多注解配法
来源:互联网 发布:异世淘宝女王txt百度云 编辑:程序博客网 时间:2024/05/19 14:53
下面是权限和角色的多对多配置
角色表实体bean
package com.sxt.beans;import java.io.Serializable;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.OneToMany;import javax.persistence.Table;import org.hibernate.annotations.Cascade;@Entity@Table(name="t_role")public class Role implements Serializable { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer roleId; @Column private String roleName; @OneToMany(cascade=CascadeType.ALL) @JoinColumn(name="roleId") private Set<User> users = new HashSet<User>(); @ManyToMany(cascade=CascadeType.ALL)//多对多要配置ManyToMany,Cascade=CascadeType.ALL是是否要级联 @JoinTable(name="t_role_right",joinColumns=@JoinColumn(name="roleId"),inverseJoinColumns=@JoinColumn(name="rightId"))//name="t_role_right"是中间表的表名,joinColumns=@JoinColumn(name="roleId")是这个bean和中间表的关联的字段,也就是roleId,inverseJoinColumns=@JoinColumn(name="rightId"))就是所对应的那个多的表和中间表的关联的字段,也就是rightId private Set<Right> rights = new HashSet<Right>(); public Role() { } public Integer getRoleId() { return roleId; } public void setRoleId(Integer roleId) { this.roleId = roleId; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public Set<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; } public Set<Right> getRights() { return rights; } public void setRights(Set<Right> rights) { this.rights = rights; }}
权限表实体bean
package com.sxt.beans;import java.io.Serializable;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.Table;@Entity@Table(name="t_right")public class Right implements Serializable { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer rightId; @Column private String rightName; @Column private String url; @ManyToMany(mappedBy="rights")//因为是多对多所有要配置ManyToMany,mappedBy="rights"权限反转 也就是把维护两者的关系交给谁,rights就是对面权限(right)的set集合的名称 private Set<Role> roles = new HashSet<Role>(); public Right() { } public Integer getRightId() { return rightId; } public void setRightId(Integer rightId) { this.rightId = rightId; } public String getRightName() { return rightName; } public void setRightName(String rightName) { this.rightName = rightName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; }}
在hibernate.cfg.xml文件中引入注解bean
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <!-- 配置回话工厂 --> <session-factory> <!-- 驱动名称 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- URL --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sxt</property> <!-- 用户名 --> <property name="hibernate.connection.username">root</property> <!-- 密码 --> <property name="hibernate.connection.password">root</property> <!--方言:hibernate根据方言类将对象"翻译"成相对于的sql语句 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 打印生成的sql语句 --> <property name="hibernate.show_sql">true</property> <!-- 引入注解的bean的java文件 --> <mapping class="com.sxt.beans.Role" /> <mapping class="com.sxt.beans.Right" /> <!-- 引入映射文件 --> </session-factory></hibernate-configuration>
注意:多对多只要配置一方很多的配置,另一方只要配置极少就好了
还有装的时候要互相装,如上面这个要权限装角色,角色也要装权限.
还有保存的时候保存级联那一方,被级联那一方会自动的级联保存.如上面这个只要保存角色,会自动级联保存权限
阅读全文