首页 > 解决方案 > ArgumentException:在字符 xx 处遇到“”,但应为:[]

问题描述

我对带有连接子句的简单 SELECT 查询有疑问。

我正在尝试获取 Author 及其书籍列表。我的查询看起来像:

public Author findAuthorWithBooks(Integer authorId) {
    return (Author) em.createQuery("SELECT a FROM Author a LEFT JOIN a.books WHERE a.id = :authorId")
        .setParameter("authorId", authorId)
        .getSingleResult();
}

但是当代码运行时我得到ArgumentException: Encounter "" at character xx, but expected: []

简化实体如下所示:

public class Author {
    @OneToMay(mappedBy = "author", fetch=LAZY)
    private Collections<Book> books;
}

public class Book {
    @ManyToOne(fetch=LAZY)
    @JoinColumn(name="AUTHOR_ID")
    private Collections<Book> books;
}

我想我犯了一些非常愚蠢的错误,但我找不到它。

标签: javajpajpqlopenjpa

解决方案


这是您的问题中的拼写错误,或者您的Book课程是错误的。它应该如下所示:

public class Book {
    @ManyToOne(fetch=LAZY)
    @JoinColumn(name="AUTHOR_ID")
    private Author author;
}

此外,您的查询似乎不正确。尝试以下操作:

public Author findAuthorWithBooks(Integer authorId) {
    return (Author) em.createQuery("SELECT a FROM Author a LEFT JOIN a.books b WHERE b.id = :authorId")
        .setParameter("authorId", authorId)
        .getSingleResult();
}

推荐阅读