2015-04-16 6 views
6

Ich habe folgende Hibernate Code, ich glaube, sollte funktionieren, aber es wirft einen Fehler:Überprüfen Sie, ob Entity ist in der Liste der zugeordneten Einheiten

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.SQLGrammarException: ERROR: syntax error at or near "." Position: 503

Der entsprechende Code ist folgende:

@Override 
public List<RepositoryLink> getRepositoryLinks(final DugaUser user) { 
    Query query = sessionFactory.getCurrentSession() 
     .createQuery("from RepositoryLink link where :user in (link.dugaUsers)"); 
    query.setParameter("user", user); 
    return query.list(); 
} 

Wo RepositoryLink ist die folgende:

@Entity 
@Table(name = "repository_links") 
public class RepositoryLink { 
    @Id 
    @GeneratedValue 
    private Integer id; 

    @OneToOne 
    @JoinTable(name = "repository_links_github_repositories", 
     joinColumns = {@JoinColumn(name = "github_repository_id", referencedColumnName = "id")}, 
     inverseJoinColumns = {@JoinColumn(name = "repository_link_id", referencedColumnName = "id")}) 
    private GithubRepository githubRepository; 

    @OneToMany 
    @JoinTable(name = "repository_links_duga_users", 
     joinColumns = {@JoinColumn(name = "duga_user_id", referencedColumnName = "id")}, 
     inverseJoinColumns = {@JoinColumn(name = "repository_link_id", referencedColumnName = "id")}) 
    private List<DugaUser> dugaUsers = new ArrayList<>(); 

    public Integer getId() { 
     return id; 
    } 

    public GithubRepository getGithubRepository() { 
     return githubRepository; 
    } 

    public void setGithubRepository(final GithubRepository githubRepository) { 
     this.githubRepository = githubRepository; 
    } 

    public List<DugaUser> getDugaUsers() { 
     return dugaUsers; 
    } 

    public void setDugaUsers(final List<DugaUser> dugaUsers) { 
     this.dugaUsers = dugaUsers; 
    } 
} 

ich es wahrscheinlich mit so arbeiten könnte bekommen Ich möchte mitmachen, aber ich dachte, es wäre schöner, wenn ich die in-Syntax zum Laufen bringen könnte, warum funktioniert das nicht so?

+0

Versuchen Sie, die Klammer innerhalb '(link.dugaUsers Entfernen)'. EclipseLink zum Beispiel mag es nicht. – gtgaxiola

+0

@gtgaxiola Ändert nichts – skiwi

+0

normalerweise habe ich gesehen, die 'in-Klausel' ist ein benannter Parameter wie in [Diese Antwort] (http://stackoverflow.com/questions/3126366/doing-an-in-query- with-hibernate) Wenn ich mir die Hibernate-Dokumentation anschaue, sehe ich kein Beispiel für den Typ, den Sie versuchen. – gtgaxiola

Antwort

5

Ich kann nicht mehr direkt erklären, warum das funktioniert, ohne die Hibernate-Dokumente selbst zu überprüfen. ;)

verwenden in Ihrer Suchanfrage: IN elements(link.dugaUsers)

Verwandte Themen