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条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?