首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CriteriaBuilder和使用别名选择原因

CriteriaBuilder和使用别名选择原因
EN

Stack Overflow用户
提问于 2012-04-27 16:51:51
回答 2查看 13.9K关注 0票数 0

我想用CriteriaBuilder为这类sql创建一个查询;

代码语言:javascript
运行
复制
SELECT myDefinedAlias.id, myDefinedAlias.name, myDefinedAlias.aFieldForFK select from Person as myDefinedAlias where myDefinedAlias.name = ?1

如何完成定义别名的工作?

我可以创建没有别名的查询,但是我不能定义别名.

代码语言:javascript
运行
复制
CriteriaQuery<Person> cq = criteriBuilder.createQuery(Person.class);
Root<Person> person = cq.from(Person.class);
cq = cq.select(person);
cq = cq.where(criteriaBuilder.equal(person.get(Person_.name), "Chivas")))

我需要这个给QueryHints,批取。

代码语言:javascript
运行
复制
.setHint(QueryHints.BATCH, "myDefinedAlias.aFieldForFK.itsNestedAttribute"); 

我被困住了,找不到任何关于我的问题的东西。有没有人?

问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-27 21:27:48

我认为你这样做是错误的。在生成sql-语句时,JPA本身需要sql语句别名。要使嵌套查询提示工作,需要在实体中指定关系。例如,如果Person实体有到House实体的OneToMany映射-而且Person类中的属性名是livedInHouses。查询提示将变成:.setHint(QueryHints.BATCH,"Person.livedInHouses")。它几乎不可能使用FKs,它存在于数据库中,但没有注释为JPA中实体上的关系。

票数 0
EN

Stack Overflow用户

发布于 2013-09-11 12:04:18

执行cq.select(person).alias("myDefinedAlias")会分配您的别名,随后可以在批处理/获取查询提示中使用它。Eclipselink支持嵌套的fetch连接,只要您不传输到-许多关系(集合)。也就是说,.setHint(QueryHints.BATCH, myDefinedAlias.toOneRelation.toManyRelation")工作,而.setHint(QueryHints.BATCH, .setHint(QueryHints.BATCH, "myDefinedAlias.toManyRelation.toOneRelation")不应该工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10354762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档