我尝试用 java 和 jpa 做函数 searchBook。我有 2 个类,即媒体和书籍。书扩展媒体。我将数据保存在不同的表中。我尝试从以下查询中选择数据:
TypedQuery<Media> query = em.createQuery(
"SELECT m.title, b.isbn, b.authors"
+ " FROM Book b, Media m" + " WHERE b.isbn = :isbn"
+ " OR lower(m.title) LIKE :title"
+ " OR b.authors LIKE :authors", Media.class);
query.setParameter("isbn", book.getisbn());
query.setParameter("title", "%" + book.getTitle().toLowerCase()
+ "%");
query.setParameter("authors", "%" + book.getAuthors() + "%");
bookList = query.getResultList();
但我得到了错误:
java.lang.IllegalArgumentException:无法为具有多个返回值的查询创建 TypedQuery
这是我第一次使用 JPA。我找不到错误。
原文由 user1412944 发布,翻译遵循 CC BY-SA 4.0 许可协议
无需详细说明
Media
和Book
应该如何建模,我至少会解释为什么会出现此异常。你正在做的:
这意味着:使用
someJPQL
创建查询,该查询将返回Media
实体的实例。但是你的
JPQL
是:因此查询不会返回媒体类型的实体。它从两个不同的实体返回三个字段。您的 JPA 引擎无法从这 3 列神奇地创建 Media 实例。如果它看起来像这样,查询将返回 Media 的实例: