我想用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");
我被困住了,无法找到有关我的问题的任何内容。任何人吗?
此致
答案 0 :(得分:1)
执行cq.select(person).alias("myDefinedAlias")
分配您的别名,该别名随后可用于批处理/获取查询提示。只要您不转移到多个关系(集合),Eclipselink就支持嵌套的提取连接。
I.e。.setHint(QueryHints.BATCH, myDefinedAlias.toOneRelation.toManyRelation")
有效,而.setHint(QueryHints.BATCH, .setHint(QueryHints.BATCH, "myDefinedAlias.toManyRelation.toOneRelation")
则不行。
答案 1 :(得分:0)
我认为你这是错误的做法。 JPA需要在生成sql语句时使用自身的sql-statement-aliases。 要使嵌套查询提示起作用,需要在实体中指定关系。 例如,如果您的Person实体具有到House实体的OneToMany映射 - 并且Person类中的属性名称是livingInHouses。查询提示将变为: .setHint(QueryHints.BATCH,“Person.livedInHouses”)。它几乎不可能使用存在于数据库中的FK,但没有注释为JPA中实体上的关系。