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

Hibernate:Hibernate对获取模式进行多个select查询

杨君之
2023-03-14

我刚刚开始在应用程序中使用Hibernate。另外,我使用JPA存储库来使用自定义查询。我有多个实体,它们之间有关系。我在join列上使用了提取模式'Eagery',还使用了缓存。我观察到Hibernate正在进行多个select查询来获取每个实体,而不是在单个查询中执行。

@Entity
@Table(name = "entity_a")
public class EntityA implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    ...

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "entity_a")
    @JsonIgnore
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<EntityB> entityB = new HashSet<>();
EntityA entityA = entityARepository.findOneById(id);

Hibernate为上述语句发出一个select查询。

每当我执行entitya.getentityb()时,它就会对entityB发出另一条select语句。如何避免这种情况。如何使用Hibernate在一次选择中获得两个实体?

共有1个答案

贲言
2023-03-14

entityB是否包含名为entity_A的字段?名称应与mappedby属性中声明的完全相同。

通常,JPA提供程序需要遵守FetchType.Eager模式。这似乎是一个配置错误的问题。即使如此,虽然JPA提供者需要热切地加载热切的关联,但不能保证在单个查询中完成。有一个特定于Hibernate的注释可以用作提示:@fetch(fetchmode.join)。试试看是否管用。

 类似资料:
  • 需求:从一个用户界面,我得到一个数据库表的选定列表。这些表中的数据将被提取并存储在文件位置。我们希望使用NiFi Rest API,因为有定制UI的需求。因此,我们使用REST API调用NiFi处理器。 问题是如何在循环中为在分隔字符串中接收的每个表名调用ExecuteSQL。 如果需要更多的信息,请让我知道。

  • 在程序集的schemaLanguage后面是“http://www.w3.org/xml/xmlschema/v1.1”,newSchema()返回类型为{org.apache.xerces.jaxp.validation.simplexmlschema}的模式。我无法导入该类,错误是-org.apache.xerces.jaxp.validation.SimpleXMLSchema类型不可见 任

  • 问题陈述:在JPA hibernate中,我执行了一个方法

  • 问题内容: 这就是我想通过利用SELECT INTO使用查询结果创建表的方法。语法 与我要实现的目标非常接近,不同之处在于我希望FROM将查询用作源。 我的情况比这些简单的例子要复杂一些。 我需要创建一个表并同时插入多行。如果我可以(不能)使用先前创建的表,则该语句应如下所示: 我可以在同时创建表的同时这样做吗? 问题答案: 您可以将查询放入通用表表达式或派生表中。 在这种情况下,您可能需要进行一

  • 问题内容: 好的,这就是问题所在。 我有一个带有一些列的表,“主题”是列之一。无论“主题”字段包含具有100个字母的字符串,我都需要从“主题”字段中获取前10个字母。 例如, 表- 。列- ,,。 SQL查询: 例如,我得到的结果是 你好,这是我的主题,你好吗 我只需要前10个字符 你好,这 我知道我可以使用php substr()删除其余字符,但是在我的情况下是不可能的。我需要获取MySQL删除

  • 我有一个Symfony2应用程序与理论作为ORM。在我的应用程序中,我有两个具有一对多关系的实体。一个实体是用户,多个实体是项目。他们的关系配置如下: 用户: 项目: 问题是当我试图获取及其的列表时,Doctrine为每个用户创建单独的查询来获取它的项目。 查询本身非常简单: 是否可以使用Doctrine在一个查询中自动获取用户的所有相关项? 我使用的是SF 2.7.6和条令库,版本如下: