weixin_42376681 2012-01-09 18:24
浏览 341
已采纳

【HELP】HQL语句面向对象多实体多表关联

现在有对象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,得到用户的所有角色,再得到所有角色的对应的资源,去掉重复的资源。

  • 写回答

2条回答

  • oxcow 2012-01-10 10:04
    关注

    如果你的重复数据定义不是所有数据属性相同的话,那你可以重写roles和resources的equals方法。从而避免在Set<>时重复。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛