Ben*_*Ben 19 java hibernate native-sql
这是我的情况,我有两个基本的POJO,我已经给出了一个简单的hibernate映射:
Person
- PersonId
- Name
- Books
Book
- Code
- Description
Run Code Online (Sandbox Code Playgroud)
我的SQL查询返回如下所示的行:
PERSONID NAME CODE DESCRIPTION
-------- ---------- ---- -----------
1 BEN 1234 BOOK 1
1 BEN 5678 BOOK 2
2 JOHN 9012 BOOK 3
Run Code Online (Sandbox Code Playgroud)
我的hibernate查询如下所示:
session.createSQLQuery("select personid, name, code, description from person_books")
.addEntity("person", Person.class)
.addJoin("book", "person.books")
.list();
Run Code Online (Sandbox Code Playgroud)
这是每节:18.1.3的hibernate文档:http: //docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querysql.html#d0e17464
我期望在我的列表中得到的是2个人物对象,其中包含书籍集合中的书籍对象:
List
|- Ben
| |- Book 1
| '- Book 2
'- John
'- Book 3
Run Code Online (Sandbox Code Playgroud)
我实际看到的是:
List
|- Object[]
| |- Ben
| | |- Book 1
| | '- Book 2
| '- Book 1
|- Object[]
| |- Ben
| | |- Book 1
| | '- Book 2
| '- Book 2
'- Object[]
|- John
| '- Book 3
'- Book 3
Run Code Online (Sandbox Code Playgroud)
有谁知道使用这种方法是否有可能获得我想要的东西?
ehr*_*rdt 35
扩展Mathews的答案.强制hibernate只返回一个人列表:
List<Person> peopleWithBooks = session.createSQLQuery(
"select {p.*}, {b.*} from person p, book b where <complicated join>").
.addEntity("p", Person.class)
.addJoin("b", "p.books")
.addEntity("p", Person.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.list();
Run Code Online (Sandbox Code Playgroud)
将无需额外调用db即可获取和初始化关联工作簿实体.
重复
.addEntity("p", Person.class)
Run Code Online (Sandbox Code Playgroud)
是必要的,因为
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
Run Code Online (Sandbox Code Playgroud)
对最后添加的实体进行操作.
Mat*_*ell 12
以下适用于我:
session.createSQLQuery("select p.*, b.* from person p, book b where <complicated join>").
.addEntity("person", Person.class).addJoin("book", "person.books").list();
Run Code Online (Sandbox Code Playgroud)
这将返回一个Object[]包含列表的列表Person,每个列表都包含一个Books 列表.它在单个SQL选择中执行此操作.我认为你的问题在于你并没有特别地将人称为别人.
编辑:该方法返回一个Object [],但该数组填充了Person实例,只有Person实例.
如果Hibernate不了解如何映射到您的类,或者它无法理解如何映射连接,它将返回一个对象列表.确保每行只有一个Person/ Book组合.
| 归档时间: |
|
| 查看次数: |
47736 次 |
| 最近记录: |