作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Hibernate 和 Spring data JPA 构建一个 Web 项目。
在 Eclipse-Link 中,我们可以使用 native 查询,例如
String tableName = "sometablename";
String query = "SELECT * FROM " +tableName +"WHERE id > 10";
在 Hibernate 中我使用 @Query 注释
@Query(value = "SELECT COUNT(r.id) as resultsCount FROM #{#resultTable} r WHERE r.customerId= :customerId AND r.is_deleted=0 AND r.is_ignored=0 ", nativeQuery = true)
Integer getResultsCount(@Param("customerId") int customerId,
@Param("resultTable") String resultTable);
我尝试了#{#resultTable},但这被替换为带引号的字符串,并且我收到了一个异常
You have a error in your SQL Syntax
我想从参数动态使用表名。是否可以?如果是,请告诉我怎么做?
最佳答案
这是不可能的,@org.springframework.data.jpa.repository.Query
仅接受jpql,您不能传递表的名称,因为它不被识别为任何实体。
它声明了Query
的javadoc:
/**
* Defines the JPA query to be executed when the annotated method is called.
*/
String value() default "";
最好的解决方案不是将表名作为字符串传递,而是使用例如继承( link )或以某种方式重建数据模型来解决它。作为一个快速而肮脏的解决方案,我建议创建一个自定义存储库并使用 EntityManager.createNativeQuery 并将 sql 传递到那里。但请记住验证您正在编写的查询(验证用户输入,使用枚举作为表名),因为它可能导致 SQL 注入(inject)。
关于java - 有没有办法在 Hibernate 的 @query 注释中使用 @params 中的表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57000709/
我是一名优秀的程序员,十分优秀!