Hibernate HQL中作为参数的表名
假设我们有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 但是如果我想参
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注入吗?它看起来像是强类型。您可以更改任何属性,并找到它使用的所有位置。