表名称作为HQL中的参数 [英] Table name as parameter in HQL

查看:168
本文介绍了表名称作为HQL中的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我们有HQL查询:

  String ageQuery =select people from people where name =:name; 



Session session = getSession();
查询查询=会话。
createSQLQuery(nameQuery)。
setParameter(name,Thomas);
// query.list();返回结果

但是如果我想参数化表名,该怎么办?不能像这样使用它:

  String ageQuery =select:table from people where name =:name; 

Session session = getSession();
查询查询=会话。
createSQLQuery(ageQuery)。
setParameter(table,age)。
setParameter(name,Thomas);

我已经应用了解决方法:

  String ageQuery =select:table:from people where name =:name; 

Session session = getSession();
查询查询=会话。
createSQLQuery(ageQuery。
replace(:table:,age))。
setParameter(name,Thomas);

...但我不太喜欢它。有没有其他解决方案?

解决方案

您无法将表名称定义为参数;你必须以老式的方式建立以字符串连接的语句


你的解决方法不是解决方法,而是继续进行的唯一方法


是一个类似于描述在不正确的语法'@ P0'附近。在MSSQL中创建和删除登录时出现异常


Let's assume we have the HQL query:

String ageQuery = "select age from people where name = :name";

Session session = getSession();
Query query = session.
        createSQLQuery(nameQuery).
        setParameter("name", "Thomas");
// query.list(); returns the result

But what if I want to parametrize the table name? One can't use it like this:

String ageQuery = "select :table from people where name = :name";

Session session = getSession();
Query query = session.
        createSQLQuery(ageQuery).
        setParameter("table", "age").
        setParameter("name", "Thomas");

I've applied the workaround:

String ageQuery = "select :table: from people where name = :name";

Session session = getSession();
Query query = session.
        createSQLQuery(ageQuery.
        replace(":table:", "age")).
        setParameter("name", "Thomas");

... but I don't really like it. Is there any other solution?

解决方案

You can't define table name as parameter; you have to build statement with string concatenation in old fashion way.
Your workaround is not a workaround, but the only way to proceed.
Is an issue similar to the one described in Incorrect syntax near '@P0'. exception when create and drop Login in MSSQL

这篇关于表名称作为HQL中的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆