0

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

SELECT myDefinedAlias.id, myDefinedAlias.name, myDefinedAlias.aFieldForFK select from Person as myDefinedAlias where myDefinedAlias.name = ?1

我怎样才能完成为此定义别名?

我可以创建没有别名的查询,但我无法定义别名......

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,批量获取。

.setHint(QueryHints.BATCH, "myDefinedAlias.aFieldForFK.itsNestedAttribute"); 

我被卡住了,找不到任何关于我的问题的信息。任何人?

问候

4

2 回答 2

1

这样做cq.select(person).alias("myDefinedAlias")会分配您的别名,该别名随后可用于批处理/获取查询提示。只要您不转移到多关系(集合),Eclipselink 就支持嵌套提取连接。即.setHint(QueryHints.BATCH, myDefinedAlias.toOneRelation.toManyRelation").setHint(QueryHints.BATCH, .setHint(QueryHints.BATCH, "myDefinedAlias.toManyRelation.toOneRelation")不应该的情况下工作。

于 2013-09-11T12:04:18.877 回答
0

我认为你正在以错误的方式解决这个问题。JPA 在生成 sql-statements 时需要 sql-statement-aliases 供自己使用。要使嵌套查询提示起作用,需要在实体中指定关系。例如,如果您的 Person 实体有一个到 House 实体的 OneToMany 映射 - 并且 Person 类中的属性名称是 liveInHouses。查询提示将变为:.setHint(QueryHints.BATCH, "Person.livedInHouses")。使用数据库中存在但未注释为 JPA 中实体上/实体中的关系的 FK 几乎是不可能的。

于 2012-04-27T21:27:48.000 回答