Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate HQL中作为参数的表名_Hibernate_Hql - Fatal编程技术网

Hibernate HQL中作为参数的表名

Hibernate HQL中作为参数的表名,hibernate,hql,Hibernate,Hql,假设我们有HQL查询: 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 但是如果我想参

假设我们有HQL查询:

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
但是如果我想参数化表名呢?不能这样使用它:

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

Session session = getSession();
Query query = session.
        createSQLQuery(ageQuery).
        setParameter("table", "age").
        setParameter("name", "Thomas");
我已经应用了解决方法:

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

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

。。。但我真的不喜欢它。是否有其他解决方案?

不能将表名定义为参数;您必须以旧的方式使用字符串连接构建语句。
您的解决方案不是解决方案,而是继续进行的唯一方法。

中描述的问题类似,您不能将表名定义为参数;您必须以旧的方式使用字符串连接构建语句。
您的解决方案不是解决方案,而是继续进行的唯一方法。

问题类似于下面我使用动态查询中描述的问题:

var query = session.CreateQuery(String.Format("update {0} set {1} = :updatevalue where {2} = :wherevalue",
    MyClassMapping<UserEntity>.GetEntityName(),
    MyClassMapping<UserEntity>.GetPropertyName(x => x.LastLoginTime),
    MyClassMapping<UserEntity>.GetPropertyName(x => x.UserKey)))
    .SetParameter("updatevalue", DateTime.Now)
    .SetParameter("wherevalue", user.UserKey);
int rowsAffected = query.ExecuteUpdate();
var query=session.CreateQuery(String.Format(“更新{0}集{1}=:更新值,其中{2}=:wherevalue”),
MyClassMapping.GetEntityName(),
MyClassMapping.GetPropertyName(x=>x.LastLoginTime),
MyClassMapping.GetPropertyName(x=>x.UserKey)))
.SetParameter(“updatevalue”,DateTime.Now)
.SetParameter(“wherevalue”,user.UserKey);
int rowsAffected=query.ExecuteUpdate();

我在下面使用动态查询:

var query = session.CreateQuery(String.Format("update {0} set {1} = :updatevalue where {2} = :wherevalue",
    MyClassMapping<UserEntity>.GetEntityName(),
    MyClassMapping<UserEntity>.GetPropertyName(x => x.LastLoginTime),
    MyClassMapping<UserEntity>.GetPropertyName(x => x.UserKey)))
    .SetParameter("updatevalue", DateTime.Now)
    .SetParameter("wherevalue", user.UserKey);
int rowsAffected = query.ExecuteUpdate();
var query=session.CreateQuery(String.Format(“更新{0}集{1}=:更新值,其中{2}=:wherevalue”),
MyClassMapping.GetEntityName(),
MyClassMapping.GetPropertyName(x=>x.LastLoginTime),
MyClassMapping.GetPropertyName(x=>x.UserKey)))
.SetParameter(“updatevalue”,DateTime.Now)
.SetParameter(“wherevalue”,user.UserKey);
int rowsAffected=query.ExecuteUpdate();

这有助于避免SQL注入吗?它看起来像是强类型。您可以更改任何属性,并找到它使用的所有位置。这有助于避免SQL注入吗?它看起来像是强类型。您可以更改任何属性,并找到它使用的所有位置。