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

Hibernate本机SQL查询检索实体和集合

夹谷茂
2023-03-14
问题内容

这是我的情况,我有两个基本的POJO,并给出了一个简单的休眠映射:

Person
  - PersonId
  - Name
  - Books

Book
  - Code
  - Description

我的SQL查询返回的行看起来像这样:

PERSONID NAME       CODE DESCRIPTION
-------- ---------- ---- -----------
1        BEN        1234 BOOK 1
1        BEN        5678 BOOK 2
2        JOHN       9012 BOOK 3

我的休眠查询如下所示:

session.createSQLQuery("select personid, name, code, description from person_books")  
       .addEntity("person", Person.class)
       .addJoin("book", "person.books")
       .list();

这是每个部分的内容:Hibernate文档的18.1.3:http :
//docs.jboss.org/hibernate/core/3.6/reference/zh-
CN/html/querysql.html#d0e17464

我希望在清单中得到的是2个人对象,其中包含藏书中的书对象:

List
 |- Ben
 |   |- Book 1
 |   '- Book 2
 '- John
     '- Book 3

我实际上看到的是:

List
 |- Object[]
 |   |- Ben
 |   |   |- Book 1
 |   |   '- Book 2
 |   '- Book 1
 |- Object[]
 |   |- Ben
 |   |   |- Book 1
 |   |   '- Book 2
 |   '- Book 2
 '- Object[]
     |- John
     |   '- Book 3
     '- Book 3

有谁知道使用这种方法是否可以获得我想要的东西?


问题答案:

HHH-2831使用addJoin的本机SQL查询或返回对象数组而不是单个实体

此行为是由一个已知​​的错误引起的。h,应该更努力地搜寻!



 类似资料:
  • 问题内容: 这是我的情况,我有两个基本的POJO,并给出了一个简单的hibernate映射: 我的SQL查询返回的行看起来像这样: 我的hibernate查询如下所示: 这是每个部分的内容:Hibernate文档的18.1.3:http : //docs.jboss.org/hibernate/core/3.6/reference/zh- CN/html/querysql.html#d0e1746

  • 我通常使用JPQL查询数据库,但今天我不得不使用原生查询,因为性能原因和JPQL中没有的特性(联接子查询)。使用JPQL,可以使用join fetch来检索父实体及其子实体集合。然而,当我尝试使用本机查询时,对于每个父实体,将返回多行,每行包含父实体及其子实体之一的数据。然后返回的列表包含父级的重复对象。假设一个父级有两个子级,那么下面的查询将在列表中返回2个父级,而不是1个。 任何人都知道如何避

  • 我需要通过在Hibernate中执行本机查询获得结果集。虽然我使用的是EntityManager,但查询和结果集可能不是实体。 当我尝试下面的代码时,我得到了一个结果。因为我要求的是一个有值的结果。(Hibernate JPA) 结果是:爱丽丝 当我试图从相同的代码中获得多个select out(查询为select name)时,指定来自fresher_test(其中id=1) 这有一种方法,我可

  • 我想在我的repo中写一个本机查询“Select*in from table”。表名与实体名不同。 运行查询时, 1如果我把实体名称返回表未找到。 2如果我将表名放在查询中,则查询的验证失败。 问题是 如果我使用"Select*from TariffPacks r2..., nativeQuery=true",我得到错误TariffPacks不存在。如果我使用"Select*from RECHAR

  • 问题内容: 我有一个关于Hibernate缓存机制的问题。我在文章中已经读到,在hibernate中执行本机SQLquery会使缓存的所有区域无效,因为hibernate不知道它将影响哪个特定实体。在这里,缓存的所有区域都是在讨论二级缓存或二级缓存(一级缓存,二级缓存)或仅二级缓存或仅一级缓存的各个区域吗? 问题答案: 该文章介绍了Hibernate的查询缓存是如何工作的,并原生查询的在现有的高速