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?
Versuchen Sie, die Klammer innerhalb '(link.dugaUsers Entfernen)'. EclipseLink zum Beispiel mag es nicht. – gtgaxiola
@gtgaxiola Ändert nichts – skiwi
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