【发布时间】:2015-06-23 05:54:45
【问题描述】:
我有以下 Hibernate 代码,我认为它应该可以工作,但它会引发错误:
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 org.hibernate.exception.SQLGrammarException: ERROR: syntax error at or near "." 位置:503
相关代码如下:
@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();
}
其中RepositoryLink 如下:
@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;
}
}
我可能可以让它与一些连接一起工作,但我认为如果我能让in 语法工作会更好,为什么它不能像这样工作?
【问题讨论】:
-
尝试删除
(link.dugaUsers)中的括号。例如 EclipseLink 不喜欢它。 -
@gtgaxiola 没有任何改变
-
通常我已经看到
in clause是一个命名参数,就像在 This answer 中查看 Hibernate 文档我没有看到您正在尝试的类型的示例。 -
@gtgaxiola 是的,我也注意到了这一点,但无法找出为什么这实际上不起作用,我也无法找到任何与此相关的问题,出于某种原因,反过来有很多关于它的问题
-
也可以试试:
IN elements(link.dugaUsers)