为什么参数绑定不按顺序工作或选择语句?

时间:2013-10-05 14:57:34

标签: mysql hibernate hibernate-mapping

我不知道我是否在问正确的问题,但我愿意测试,查询参数输入绑定是如何工作的。我测试了

string sql = select data from table where data_id =:dataId;
Session session = sessionFactory.createSQLQuery(sql);
    query.setParameter(dateId,"23456");

结果看起来

select data from table where date_id=23456;

得到了结果。

但是当我尝试在select或order by中使用它时,它不起作用

    string sql = select :data from table order by :dateId
Session session = sessionFactory.createSQLQuery(sql);
query.setParameterList("data",data.split(","));
query.setParameter("dateId",dateId);

让我们考虑一下

data="date_Id,data";
dateId="date_id";

它的节目

将列名重复到表

中的行尾

输出

row 1) date_id data
row 2) date_id data

预期产出

row 1) 234,ert
row 2) 456,jhk
任何人都可以解释它的工作原理。

由于

1 个答案:

答案 0 :(得分:0)

您的第二个示例将无法编译,因为在使用后定义了字符串sql,我只是假设这是一个复制和粘贴错误。

Sql参数不太适用。第二个例子生成的sql可能是

的内容
select 'date_Id','data' from table order by 'date_Id'

如果table中有两行,则会获得您看到的输出。你需要做的是把你自己的sql字符串放在一起:

string sql="select " + data + " from table order by " + dateId;

警告:当你做这样的事情时,你需要非常小心。可能有一个您检查的允许列名称的白名单,并筛选出不在白名单上的任何字符串。