现在有对象User,里面有属性roles;
[code="java"]
@Entity
@Table(name="USER_")
public class User implements Serializable{
private static final long serialVersionUID = 1L;
/** 用户编码 */
@Id
@GeneratedValue(generator="autoIncrement")
@GenericGenerator(name="autoIncrement",strategy="native")
private Long id;
/** 用户名 */
@Column(updatable=false,unique=true,length=30,nullable=false)
private String username;
/** 用户状态,1:正常;0:失效;2:异常锁定 */
@Column(length=1,nullable=false)
private int status = 1;
/** 创建时间,系统自动生成;无法修改 */
@Temporal(TemporalType.TIMESTAMP)
@Column(nullable=false,updatable=false)
private Date createDate;
/** 用户角色关联 */
@ManyToMany(fetch=FetchType.LAZY,targetEntity=Role.class)
@Cascade(value={CascadeType.SAVE_UPDATE,CascadeType.DELETE})
@JoinTable(name="DSS_IDAP_USERROLE",
joinColumns={@JoinColumn(name="USER_ID")},
inverseJoinColumns={@JoinColumn(name="ROLE_ID")},
uniqueConstraints={@UniqueConstraint(columnNames={"USER_ID","ROLE_ID"})}
)
private Set roles = new HashSet(0);
[/code]
Role对象,里面有属性resources;
[code="java"]
@Entity
@Table(name="ROLE_")
public class Role implements Serializable{
private static final long serialVersionUID = 1L;
/**角色编码*/
@Id
@GeneratedValue(generator="autoIncrement")
@GenericGenerator(name="autoIncrement",strategy="native")
private Long id;
/**角色名称*/
@Column(unique=true,length=30,nullable=false)
private String name;
/**角色资源*/
@ManyToMany(fetch=FetchType.LAZY,targetEntity=Resource.class)
@JoinTable(name="DSS_IDAP_ROLERESOURCE",
joinColumns={@JoinColumn(name="ROLE_ID")},
inverseJoinColumns={@JoinColumn(name="RES_ID")},
uniqueConstraints={@UniqueConstraint(columnNames={"ROLE_ID","RES_ID"})}
)
private java.util.Set resources;
[/code]
现在想通过用户的ID来找该用户可以访问的资源;
SQL语句可以写出来;但是HQL语句不知道怎么写,请大牛们给帮个忙。
根据User id 找到 user,得到用户的所有角色,再得到所有角色的对应的资源,去掉重复的资源。