Spring Criteria Query中如何为rootObject自定义Hibernate查询别名?
Hibernate Criteria API自定义表别名解决方案
为什么你的设置不生效
你调用的userRoot.alias("user")是用来获取当前Root对象的别名,并非设置别名的方法,所以自定义别名不会生效。
正确设置别名的两种方式
方式1:创建Root时直接指定别名
使用CriteriaQuery.from()的重载方法,传入实体类的同时指定别名:Root<User> userRoot = criteriaQuery.from(User.class, "user");方式2:关联查询时指定别名
如果涉及关联表查询,给关联对象设置别名的示例如下:CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> userRoot = cq.from(User.class, "user"); // 给关联的Order表设置别名u_order Join<User, Order> orderJoin = userRoot.join("orders", JoinType.INNER); orderJoin.alias("u_order");
配置日志确保SQL清晰输出
要让控制台输出的SQL正确显示自定义别名,需配置Hibernate日志:
在Spring Boot的application.properties中添加以下配置:
spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.use_sql_comments=true
其中format_sql会格式化SQL结构,use_sql_comments会在SQL中添加注释标注别名,进一步提升可读性。
最终效果
配置完成后,生成的SQL会变为:
select * from user user .....
这样在控制台就能直接看清自定义的别名,无需复制到其他工具辅助查看。
内容的提问来源于stack exchange,提问作者tejaskale007
相关产品推荐
相关产品推荐

