HIbernate多对多_查询

来源:互联网 发布:电视机网络电视怎么调 编辑:程序博客网 时间:2024/06/11 03:03
user -> role
单向多对多 通过role.id查询user的数据

String hql = "select bu from BUser bu left join "
+ " bu.roles r where r.id = ? ";

BUser
package com.cpic.shz.entity;
 
import java.util.Arrays;
import java.util.Date;
import java.util.Set;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
 
import org.apache.commons.lang3.builder.ToStringBuilder;
 
import com.cpic.shz.util.DataUtil;
import com.google.common.collect.Sets;
 
/**
* @package :  com.cpic.shz.entity
* @file : BUser.java
* @date : 2015年9月17日 上午10:47:25
* @user : liuhao
* @note : 后台角色表
*/
@Entity
@Table(name = "shz_hc_buser")
public class BUser extends BaseEntity {
 
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String pwd;
private Date regdate;
 
private Set<Role> roles = Sets.newHashSet();
 
private boolean isSuperAdmin = false;
 
private long rightNum[];
 
public BUser() {
}
 
/**
* 从shz_appusers创建用户
*
* @throws Exception
*/
public BUser(String username, String pwd) throws Exception {
super();
this.username = username;
this.pwd = pwd;
this.regdate = DataUtil.dateFormat(new Date());
}
 
@Id
@GeneratedValue
public Integer getId() {
return id;
}
 
public void setId(Integer id) {
this.id = id;
}
 
public String getUsername() {
return username;
}
 
public void setUsername(String username) {
this.username = username;
}
 
public String getPwd() {
return pwd;
}
 
public void setPwd(String pwd) {
this.pwd = pwd;
}
 
public Date getRegdate() {
return regdate;
}
 
public void setRegdate(Date regdate) {
this.regdate = regdate;
}
 
@Transient
public boolean isSuperAdmin() {
return isSuperAdmin;
}
 
public void setSuperAdmin(boolean isSuperAdmin) {
this.isSuperAdmin = isSuperAdmin;
}
 
@Transient
public long[] getRightNum() {
return rightNum;
}
 
public void setRightNum(long[] rightNum) {
this.rightNum = rightNum;
}
/**
* 计算出当前用户的所有权限
*/
public void calculateRightNum(){
for(Role role :roles){
if("-1".equals(role.getRoleValue())){
this.isSuperAdmin = true;
//释放资源
roles = null;
return ;
}
for(Right right :role.getRights()){
rightNum[right.getRightPos()] = rightNum[right.getRightPos()] | right.getRightCode();
}
}
//释放资源
roles = null;
}
/**
* 是否有当前Url的权限
*/
public boolean hasRight(Right r){
return !( (this.rightNum[r.getRightPos()] & r.getRightCode()) ==0 );
}
@ManyToMany
@JoinTable(name = "shz_hc_buser_role",
joinColumns = { @JoinColumn(name = "buser_id") },
inverseJoinColumns = { @JoinColumn(name = "role_id") })
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
 
@Override
public String toString() {
ToStringBuilder builder = new ToStringBuilder(this);
builder.append("id", id);
builder.append("username", username);
builder.append("pwd", pwd);
builder.append("regdate", regdate);
builder.append("roles", roles);
builder.append("isSuperAdmin", isSuperAdmin);
builder.append("rightNum", Arrays.toString(rightNum));
return builder.toString();
}
 
}

Role类
package com.cpic.shz.entity;
 
import java.util.HashSet;
import java.util.Set;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
 
import org.apache.commons.lang3.builder.ToStringBuilder;
 
@Entity
@Table(name = "shz_hc_role")
public class Role extends BaseEntity {
 
private static final long serialVersionUID = 1L;
 
private Integer id;
private String roleName;
private String roleValue;
private String roleDesc;
 
 
public Role() {
}
 
public Role(Integer id, String roleName, String roleValue, String roleDesc) {
super();
this.id = id;
this.roleName = roleName;
this.roleValue = roleValue;
this.roleDesc = roleDesc;
}
 
@Id
@GeneratedValue
public Integer getId() {
return id;
}
 
public void setId(Integer id) {
this.id = id;
}
 
public String getRoleName() {
return roleName;
}
 
public void setRoleName(String roleName) {
this.roleName = roleName;
}
 
public String getRoleValue() {
return roleValue;
}
 
public void setRoleValue(String roleValue) {
this.roleValue = roleValue;
}
 
public String getRoleDesc() {
return roleDesc;
}
 
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
@Override
public String toString() {
ToStringBuilder builder = new ToStringBuilder(this);
builder.append("id", id);
builder.append("roleName", roleName);
builder.append("roleValue", roleValue);
builder.append("roleDesc", roleDesc);
return builder.toString();
}
}