我用下面的查询来获得java.util.Map
与指数id
,text
以及object
:
Query q = mySession.createQuery(
"SELECT u.id AS id, u.name AS text, u AS object FROM User u")
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
…但object
似乎是保留字。例如obj
可以。MySQL使用反引号转义的当前方式是如何在HQL中转义 别名 ?
使用反引号会出现以下错误:
Exception in thread "main" org.hibernate.QueryException: unexpected char:
'`' [SELECT u.id AS id, u.name AS text, u AS `object` FROM User u]
您可以通过使用自定义“别名映射”转换器的解决方法来实现,因此您的代码将更改为如下所示
Query q = mySession.createQuery(
"SELECT u.id AS id, u.name AS text, u AS obj FROM User u")
.setResultTransformer(
AliasToMapTransformer.renameAlias("obj", "object").build()
);
然后使用此类:
public class AliasToMapTransformer extends BasicTransformerAdapter {
private Map<String, String> renameAliasMap;
public AliasToMapTransformer(Map<String, String> renameAliasMap) {
this.renameAliasMap = (renameAliasMap == null) ? Collections.<String, String>emptyMap() : renameAliasMap;
}
@Override
public Object transformTuple(Object[] tuple, String[] aliases) {
Map<String, Object> result = new HashMap<String, Object>(tuple.length);
for (int i = 0; i < tuple.length; i++) {
String alias = aliases[i];
if (alias != null) {
String newAlias = renameAliasMap.get(alias);
result.put((newAlias != null) ? newAlias : alias, tuple[i]);
}
}
return result;
}
public static Builder renameAlias(String alias, String newAlias) {
return new Builder().renameAlias(alias, newAlias);
}
public static class Builder {
private Map<String, String> aliasConversionMap = new HashMap<String, String>();
public Builder renameAlias(String alias, String newAlias) {
aliasConversionMap.put(alias, newAlias);
return this;
}
public AliasToMapTransformer build() {
return new AliasToMapTransformer(aliasConversionMap);
}
}
}
问题内容: 我正在尝试对多个不同的数据库使用一种Hibernate映射:H2,Oracle,MySql。 每个数据库都有一个不同的保留字列表。 我希望Hibernate自动转义保留字。 我知道我可以: 使用反引号强制转义(为了安全起见,请逃避一切) 更改所有标识符,使它们在任何数据库中都肯定不是关键字(使它们难看) 将模式绑定到一组特定的数据库,转义关键字的并集(如果将新数据库添加到组合中,则会中
问题内容: 我似乎在Hibernate中映射列表时遇到问题。在我们的项目中有一类用含有类与含有。 Hibernate 是否可以使用注释进行映射?我的意思是,因为它没有注释? 问候 问题答案: 用途: 资料来源: 7.2.3。基本类型和可嵌入对象的集合
代码如下: 运行时,会出现错误 原因:org。冬眠QueryParameterException:位置超出已声明序数参数的数量。请记住,序数参数是基于1的!职位:1 被抛出,我知道这是由sql字符串中的'--'引起的,hibernate将其解释为sql注释, 我试着用 这可以成功运行,但是输出变成\-\-,但是我想要的是——在输出中。 那么如何在hibernate中转义--? 如果我运行selec
问题内容: 我正在使用和。我以前在sql中使用过正则表达式,现在是我第一次在HQL中使用它。 这是我的hql,当我不带功能运行它时,它按预期运行。但是我不能用表达式执行它。 它说.. 嵌套的异常是org.hibernate.hql.ast.QuerySyntaxException:意外的AST节点:(靠近第1行,第66列..... 请帮助,如何在hibernate本机查询中使用?或其他替代方法。
我正在使用oracle 10g和hibernate 3.3.2。我以前在sql中使用过正则表达式,现在我第一次在HQL中使用它。 这是我的hql,当我在没有类似regex_的函数的情况下运行它时,它会按预期运行。但我无法用类似正则表达式的表达式执行它。 它说... 嵌套异常是org.hibernate.hql.ast.QuerySynTaxException:意外的AST节点:(靠近第1行,第66
我想使用hibernate对距离进行排序,但“st_distance”不起作用。日志: ----org.hibernate.queryexception:node:org.hibernate.hql.internal.ast.tree.methodnode-[METHOD_CALL]methodnode:'('+-[METHOD_NAME]identnode:'st_distance‘{Origi