【问题标题】:Check if Entity is in list of mapped entities检查实体是否在映射实体列表中
【发布时间】: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)

标签: java spring hibernate


【解决方案1】:

如果我自己没有检查休眠文档,我无法再直接详细说明为什么会这样。 ;)

在您的查询中使用:IN elements(link.dugaUsers)

【讨论】:

    猜你喜欢
    • 2014-08-08
    • 2020-04-14
    • 2012-05-25
    • 1970-01-01
    • 2016-03-15
    • 2020-04-02
    • 2014-04-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多