JPA Criteria API group_concat 用法
我目前正在编写一份报告,其中一个字段需要 group_concat 。
CriteriaQuery<GameDetailsDto> criteriaQuery = criteriaBuilder
.createQuery(GameDetailsDto.class);
Root<BetDetails> betDetails = criteriaQuery.from(BetDetails.class);
Expression<String> betSelection = betDetails.get("winningOutcome");
criteriaQuery.multiselect(
// other fields to select
criteriaBuilder.function("group_concat", String.class, betSelection),
// other fields to select
);
//predicate, where clause and other filters
TypedQuery<GameDetailsDto> typedQuery = entityManager.createQuery(criteriaQuery);
这会引发空指针异常:
TypedQuery<GameDetailsDto> typedQuery = entityManager.createQuery(criteriaQuery);
我是否错误地使用了 criteriaBuilder 的函数方法?
文件说:
function(String name, Class<T> type, Expression<?>... args);
I am currently working on a report which needs a group_concat for one of the fields.
CriteriaQuery<GameDetailsDto> criteriaQuery = criteriaBuilder
.createQuery(GameDetailsDto.class);
Root<BetDetails> betDetails = criteriaQuery.from(BetDetails.class);
Expression<String> betSelection = betDetails.get("winningOutcome");
criteriaQuery.multiselect(
// other fields to select
criteriaBuilder.function("group_concat", String.class, betSelection),
// other fields to select
);
//predicate, where clause and other filters
TypedQuery<GameDetailsDto> typedQuery = entityManager.createQuery(criteriaQuery);
this throws a null pointer exception on the line:
TypedQuery<GameDetailsDto> typedQuery = entityManager.createQuery(criteriaQuery);
did i incorrectly use the function method of the criteriaBuilder?
the documentations says:
function(String name, Class<T> type, Expression<?>... args);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我想出了如何使用 Hibernate-jpa-mysql 执行此操作:
1.) 创建了一个扩展 org.hibernate.dialect.function.SQLFunction 的 GroupConcatFunction 类(目前用于单列 group_concat)
}
2.) 我创建了扩展 org.hibernate.dialect.MySQL5Dialect 的 CustomMySql5Dialect 类,并注册了步骤 1 中创建的 group_concat 类
3.)在应用程序上下文中,我更新了 jpaVendorAdapter 以使用 CustomMySql5Dialect 作为数据库平台
4.)终于可以使用它了
I figured out how to do this with Hibernate-jpa-mysql:
1.) created a GroupConcatFunction class extending org.hibernate.dialect.function.SQLFunction (this is for single column group_concat for now)
}
2.) i created the CustomMySql5Dialect class extending org.hibernate.dialect.MySQL5Dialect and registered the group_concat class created in step 1
3.) On the app context, i updated the jpaVendorAdapter to use the CustomMySql5Dialect as the databasePlatform
4.) Finally to use it
简单的解决方案:无需创建整个类,只需使用 SQLFunctionTemplate 即可。
然后用你自己的 SQL 方言注册这个函数(例如在构造函数中)
Simple solution: instead of creating the whole class, just use
SQLFunctionTemplate
.and then register this function in your own SQL dialect (eg. in constructor)
建议属性:
和类别:
Suggested property:
and class: