我的数据库中有很多列,并且不想为所有这些列编写自定义查询,因此请考虑以下方法运行每个列名称dynamicaly,我将其作为 column_name 。这样的事情是可能的,还是有其他方法可以做到这一点?
@Query("select #column_name from Item Where #column_name like %?2% ")
List<Item> getUniqueColumn(String column_name,String column_text);
顺便提一下,在春季文献中没有提到这个案例。
答案 0 :(得分:2)
您只能将您期望作为参数的值传递给HQL查询。您无法传递列名或表名。
Hibernate基本上使用PreparedStatement
来处理,并且无法准备一个语句,其中查询的表/列尚未知晓。
您必须使用Criteria API编写一些String替换逻辑或构建查询
List<Object> getUniqueColumn(String column_name,String column_text){
StringBuilder query = new StringBuilder();
query.append("select #column_name ");
query.append("from Item ");
query.append("where #column_name like %?1%");
query = query.toString("#column_name", column_name);
session.createQuery(query).setString(1, column_text).list();
}
还要记住,你在这里做的是一个投影,你不会得到一个项目列表而是一个对象列表。