2016-08-12 43 views
0

与HQL工作,在这个简化的场景:HQL查询与LEFT JOIN和WHERE不给结果

String query = "SELECT new CustomUser(" + 
       "user.userID AS id," + 
       "user.username AS username)" + 
       "FROM User AS user" + 
       " LEFT JOIN user.friends as friend " + 
       " where user.username like (:query)" + 
       " OR " + 
       " friend.username like (:query) "; 

这是回馈只有那些至少有一个朋友的用户,但我想通过获得用户一个条件,除了有朋友或没有。

  • 动态实例化使用,因为域名要求
  • 我注意到,它给所有的用户,有朋友或没有,如果有关于连接表没有条件(friend.username像(:查询)

这些都是我的表:

用户

@Id... 
protected Integer userID; 

@Column(name = "username") 
private String username; 

@OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) 
private List<Friend> friends; 

朋友

@Id 
    private Integer friendID; 

    @Column(name = "username") 
    private String username; 

    @ManyToOne(cascade = CascadeType.DETACH) 
    @JoinColumn(name="userid") 
    private User user; 
  • 注:它的作品,因为我希望对本地SQL

回答

0

你可以试试这个查询。
String query = "SELECT new CustomUser(" + "user.userID AS id," + "user.username AS username)" + "FROM User AS user" + " LEFT OUTER JOIN user.friends as friend " + " where user.username like (:query)" + " OR " + " friend.username like (:query) ";

+0

谢谢,但我得到相同 –

+0

你能告诉我2表,用户和朋友? –

+0

是的,我编辑了我的问题 –