Java 如何选择一对多关系中的实体?

Java 如何选择一对多关系中的实体?,java,spring,jpa,jpql,Java,Spring,Jpa,Jpql,我有两个具有一对多关系的实体(所有者一,书籍多) 我创建了一个方法,用于查找所有者的书籍的列表。这很简单 public interface BookRepository extends JpaRepository<Book, Long> { @Query("select b from Book b where b.owner=:b") @EntityGraph(value = "Book.owner", type = EntityGraph.EntityGraphT

我有两个具有一对多关系的实体(所有者一,书籍多)

我创建了一个方法,用于查找
所有者的
书籍的列表。这很简单

public interface BookRepository extends JpaRepository<Book, Long> {

    @Query("select b from Book b where b.owner=:b")
    @EntityGraph(value = "Book.owner", type = EntityGraph.EntityGraphType.LOAD)
    List<Book> findListByOwner(@Param("w") Owner w);
}
公共接口BookRepository扩展了JpaRepository{
@查询(“从Book b中选择b,其中b.owner=:b”)
@EntityGraph(value=“Book.owner”,type=EntityGraph.EntityGraphType.LOAD)
列出findListByOwner(@Param(“w”)所有者w);
}
但我必须在我的JpaRepository中创建一个方法,通过“Book”查找“Owner”,但我不知道如何进行JPQL查询。我不知道如何在我的JPQL语句中使用Set

public interface OwnerRepository extends JpaRepository<Owner, Long> {

  @Query("select w from Owner w join fetch w.books where ???? dont know")
  @EntityGraph(value = "Owner.books", type = EntityGraph.EntityGraphType.LOAD)
  Owner findOneByBook(@Param("b") Book);
}
public接口OwnerRepository扩展了JpaRepository{
@查询(“从所有者中选择w,加入取回w,书籍在哪里???不知道”)
@EntityGraph(value=“Owner.books”,type=EntityGraph.EntityGraphType.LOAD)
所有者FindoneBook(@Param(“b”)Book);
}
更新

我不能使用getBook()和getOwner,因为当我阅读图书列表时,我只有所有者Id。我可以将别名添加到“w.books”中,类似于“b”,但我不知道在该别名旁边该做什么。无论如何,我使用了new@query(“从书b中选择o加入b.owner o,其中b=:b”),但hibernate抛出异常

Caused by: org.hibernate.QueryException: could not resolve property: books of: com.company.entities.Task [select o from Book b join b.owner o where b = :b]
    at org.hibernate.QueryException.generateQueryException(QueryException.java:137)
    at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:98)
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:568)
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:495)
    ... 65 more
Caused by: org.hibernate.QueryException: could not resolve property: books of: com.company.entities.Book
    at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77)
    at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1978)
    at org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:367)
    at org.hibernate.hql.internal.ast.tree.FromElement.getPropertyType(FromElement.java:500)
    at org.hibernate.engine.query.spi.EntityGraphQueryHint.getFromElements(EntityGraphQueryHint.java:95)
    at org.hibernate.engine.query.spi.EntityGraphQueryHint.toFromElements(EntityGraphQueryHint.java:68)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:685)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:665)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
    ... 70 more
原因:org.hibernate.QueryException:无法解析属性:books of:com.company.entities.Task[从Book b中选择o加入b.owner o其中b=:b]
位于org.hibernate.QueryException.generateQueryException(QueryException.java:137)
位于org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomFile(QueryTranslatorImpl.java:234)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
位于org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:131)
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:98)
位于org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:568)
位于org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:495)
... 65多
原因:org.hibernate.QueryException:无法解析属性:books of:com.company.entities.Book
位于org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)
位于org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77)
位于org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1978)
位于org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:367)
位于org.hibernate.hql.internal.ast.tree.FromElement.getPropertyType(FromElement.java:500)
位于org.hibernate.engine.query.spi.EntityGraphQueryHint.getFromElements(EntityGraphQueryHint.java:95)
位于org.hibernate.engine.query.spi.EntityGraphQueryHint.toFromElements(EntityGraphQueryHint.java:68)
位于org.hibernate.hql.internal.ast.hqlwalker.processQuery(HqlSqlWalker.java:685)
位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:665)
位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomFile(QueryTranslatorImpl.java:206)
... 70多

有什么想法吗?我需要帮助

这些查询的目的是什么。为什么不直接使用
owner.getBooks()
book.getOwner()
?无论如何,查询可以是
从Book b join b.owner o中选择o,其中b=:b
将别名添加到“w.books”中,类似于“b”,然后对“b”施加条件我更新了我的问题
public interface OwnerRepository extends JpaRepository<Owner, Long> {

  @Query("select w from Owner w join fetch w.books where ???? dont know")
  @EntityGraph(value = "Owner.books", type = EntityGraph.EntityGraphType.LOAD)
  Owner findOneByBook(@Param("b") Book);
}
Caused by: org.hibernate.QueryException: could not resolve property: books of: com.company.entities.Task [select o from Book b join b.owner o where b = :b]
    at org.hibernate.QueryException.generateQueryException(QueryException.java:137)
    at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:98)
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:568)
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:495)
    ... 65 more
Caused by: org.hibernate.QueryException: could not resolve property: books of: com.company.entities.Book
    at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77)
    at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1978)
    at org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:367)
    at org.hibernate.hql.internal.ast.tree.FromElement.getPropertyType(FromElement.java:500)
    at org.hibernate.engine.query.spi.EntityGraphQueryHint.getFromElements(EntityGraphQueryHint.java:95)
    at org.hibernate.engine.query.spi.EntityGraphQueryHint.toFromElements(EntityGraphQueryHint.java:68)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:685)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:665)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
    ... 70 more