ArgumentException:在字符 xx 处遇到“”,但应为:[]

Posted

技术标签:

【中文标题】ArgumentException:在字符 xx 处遇到“”,但应为:[]【英文标题】:ArgumentException: Encounter "" at character xx, but expected: [] 【发布时间】:2021-12-26 04:17:07 【问题描述】:

我对带有连接子句的简单 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;

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

【问题讨论】:

【参考方案1】:

这是您的问题中的拼写错误,或者您的 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();

【讨论】:

以上是关于ArgumentException:在字符 xx 处遇到“”,但应为:[]的主要内容,如果未能解决你的问题,请参考以下文章

System.ArgumentException 路径中的非法字符

带有 WinHttpHander() 的 gRPC “ArgumentException:路径中有非法字符。”

构造 ArgumentException 时如何以编程方式确定参数名称?

System.ArgumentException:初始化字符串的格式不符合从索引 0 开始的规范。3

DotNet 5.0 IdnMapping.GetAscii 抛出 ArgumentException

从 ArgumentException 中获取原始错误消息