2016-08-12 2 views
0

Arbeiten mit HQL, auf dieser vereinfachten Szenario geben:HQL-Abfrage mit LEFT JOIN und wo nicht Ergebnisse

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) "; 

Dies wird etwas zurückzugeben nur diejenigen Benutzer, die mindestens einen Freund haben, aber ich möchte Benutzer erhalten, indem eine Bedingung, jenseits von Freunden oder nicht.

  • Dynamische Instantiierung wird wegen Domain-Anforderungen verwendet
  • ich bemerkt habe, dass es alle Benutzer gibt, Freunde oder nicht hat, wenn es keine Bedingung für die Join-Tabelle ist (friend.username wie (: query))

Das sind meine Tabellen:

Benutzer

Freund

@Id 
    private Integer friendID; 

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

    @ManyToOne(cascade = CascadeType.DETACH) 
    @JoinColumn(name="userid") 
    private User user; 
  • Hinweis: es funktioniert, wie ich auf nativen SQL

Antwort

0

erwarten Sie diese Abfrage versuchen.
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

Danke, aber ich bekomme das gleiche –

+0

können Sie mir 2 Tabelle, Benutzer und Freunde zeigen? –

+0

Ja, ich habe meine Frage bearbeitet –