当前位置: 首页 > 面试题库 >

为什么Spring Data JPA不发出JOIN查询?

凌琦
2023-03-14
问题内容

我创建了两个实体Book并且Book_Category具有一对多关系。当我发出时BookCategoryRepository.findAll(),我希望hibernate状态使用“
INNER JOIN”查询。但是它只是发出查询以从Book_Category获取数据。

我缺少什么?我该怎么做使hibernate问题的JOIN查询?

Book.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;
}

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;
}

BookCategoryRepository.java

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


bookCategoryRepository.findAll()

问题答案:

默认情况下,Hibernate使用第二个查询来检索子集合。原因之一是适当的限制查询。否则,如果至少有一个以上的子对象,则结果集中的行将比1边的实体多。

有一个注释可以更改hibernate状态下的此行为,该注释将被Spring Data
Jpa存储库忽略。注释为@Fetch(FetchMode.JOIN)。如果确实需要此行为,则可以考虑FetchMode如何在Spring DataJPA中工作



 类似资料:
  • 我创建了两个具有一对多关系的实体和。当我发布,我希望hibernate使用“内部联接”查询。但它只是发出了从Book_类别获取数据的查询。 我错过了什么?我应该怎么做才能使hibernate问题加入查询? 书JAVA 图书分类。JAVA epository.java

  • 问题内容: 似乎要合并两个或多个表,我们可以使用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中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!