当前位置: 首页 > 知识库问答 >
问题:

为什么Spring data jpa不发出JOIN查询?

郑嘉悦
2023-03-14

我创建了两个具有一对多关系的实体BookBook_Category。当我发布BookCategoryRepository时。findAll(),我希望hibernate使用“内部联接”查询。但它只是发出了从Book_类别获取数据的查询。

我错过了什么?我应该怎么做才能使hibernate问题加入查询?

书JAVA

@Entity
public  class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;

    @ManyToOne
    @JoinColumn(name = "book_category_id")
    private BookCategory bookCategory;
}

图书分类。JAVA

@Entity
@Table(name = "book_category")
public  class BookCategory {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    @OneToMany(mappedBy = "bookCategory", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Book> books;
}

epository.java

public  interface BookCategoryRepository extends JpaRepository<BookCategory, Integer> {
}


bookCategoryRepository.findAll()

共有1个答案

贾骏
2023-03-14

Hibernate默认使用第二个查询来检索子集合。其中一个原因是适当的限额查询。否则,如果至少有一个包含多个子项,则结果集中的行数将多于1边的实体数。

hibernate中存在一个注释来改变这种行为,Spring数据Jpa存储库忽略了该注释。注释是@Fetch(FetchMode.JOIN)。如果你真的需要这个行为,你可以考虑FETCHMODE如何在Spring数据JPA中工作。

 类似资料:
  • 问题内容: 我创建了两个实体并且具有一对多关系。当我发出时,我希望hibernate状态使用“ INNER JOIN”查询。但是它只是发出查询以从Book_Category获取数据。 我缺少什么?我该怎么做使hibernate问题的JOIN查询? Book.java BookCategory.java BookCategoryRepository.java 问题答案: 默认情况下,Hibernat

  • 问题内容: 似乎要合并两个或多个表,我们可以使用join或where。一个相对于另一个的优点是什么? 问题答案: 任何涉及多个表的查询都需要某种形式的关联,以将结果从表“ A”链接到表“ B”。传统的(ANSI-89)方法是: 在FROM子句中列出逗号分隔列表中涉及的表 在WHERE子句中编写表之间的关联 FROM TABLE_A a, TABLE_B b WHERE a.id = b.id 这是

  • 问题内容: 我有一个配置单元表,该配置表按年,月,日和小时划分。我需要对其执行查询以获取最近7天的数据。这是在。我的查询当前看起来像这样: 这需要很长时间。当我用上面的实际数字代替时,请说: 它会在几分钟内完成。有什么办法可以更改上面的脚本,以便实际上只包含查询中的数字而不是函数? 我尝试使用像: 但这不能解决问题。 问题答案: 解决方案 原始查询出了什么问题? unix_timestamp()

  • 问题内容: 我可以在网上(在Stack Overflow上以及其他方面)找到大量有关使用Python或在Python中进行连接是一种非常低效且不好的做法的信息。 我似乎找不到为什么效率如此低下。在这里没有提到“在某些情况下已针对20%的改进进行了优化”(仍然不清楚这些情况是什么),我找不到任何其他信息。 在比其他Python串联方法更好的技术水平上发生了什么? 问题答案: 假设您有这段代码可以从三

  • 问题内容: 我刚刚在Oracle中遇到了一个奇怪的行为,我希望它会提高ORA-00918,但事实并非如此。以该查询为例。 此查询从概念上讲是在查找具有禁用触发器的表的详细信息,但是请注意,这不是我要解决的问题。这个问题不是该查询,数据字典,视图或表所独有的。据我所知,它适用于任何一组表或视图(我尝试过的两个或三个)。 无论如何,尝试运行此查询,你会得到ORA-00918,因为两者并有一个名为列,从

  • 下面是我的代码。当我运行它时,我在线程“main”java.lang.IndexOutOfBoundsException:Index:3、Size:2中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!