hibernate 反向自身多对多、HQL

转自http://stackoverflow.com/questions/17064484/hql-query-for-many-to-many-associations-for-self-referenced-object


   @Entity
    @Table(name = "USERS")
    public class User {

    @Id
    @Column(name = "USER_ID")
    @GeneratedValue
    private long userId;
    ...
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "FRIENDS", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "FRIEND_ID"))
        private Set<User> friends;


    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "FRIENDS", joinColumns = @JoinColumn(name = "FRIEND_ID"), inverseJoinColumns = @JoinColumn(name = "USER_ID"))
        private Set<User> friendOf;

   ...
    public Set<User> getAllFriends() {
      allFriends = new HashSet<User>();
      allFriends.addAll(friends);
      allFriends.addAll(friendOf);
      return allFriends;
}


If I need all friend of a User I can get them by simply calling getAllFriends().But I want to add some restriction to the maximum number of returned friends. So I want to select all friends using HQL. I want something like this (my hql is incorrect, just to show the idea):



select u
from User u
where u.userId in (
        select fr.userId
        from User u1
        inner join u1.friends fr
        where u1.userId = :userId
    ) 
    or u in (
        select fr.userId
        from User u2
        inner join u2.friendOf fr
        where u2.userId = :userId
    ) 



have fun 微笑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值