我想用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");
我被困住了,找不到任何关于我的问题的东西。有没有人?
问候
发布于 2012-04-27 21:27:48
我认为你这样做是错误的。在生成sql-语句时,JPA本身需要sql语句别名。要使嵌套查询提示工作,需要在实体中指定关系。例如,如果Person实体有到House实体的OneToMany映射-而且Person类中的属性名是livedInHouses。查询提示将变成:.setHint(QueryHints.BATCH,"Person.livedInHouses")。它几乎不可能使用FKs,它存在于数据库中,但没有注释为JPA中实体上的关系。
发布于 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")
不应该工作。
https://stackoverflow.com/questions/10354762
复制相似问题