在纯SQL查询中使用Hibernate属性映射

时间:2011-01-14 17:47:51

标签: java hibernate attributes mapping entity

有没有办法让Hibernate替换本机SQL查询中的实体属性名称(由Session.createSQLQuery()创建)?

我想构建一个查询,其中获取任意列,这些列不会导致Hibernate实体,类似于此

SELECT t1.attr1, t2.attr2, t3.attr3 WHERE t1.attr1 = 'foo' AND t2.attr2 = ...

with“attr1”,“attr2”,...是Java属性名称,应由Hibernate自动映射。

我见过SQLQuery.addEntity(),但这似乎适用于结果集,而不是查询。

有没有办法替换查询中的属性名称,或者是否允许我轻松访问Hibernate生成的映射而不必自己检查实体上的注释的任何工具?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果只需要使用SQL查询就是获取单独的列而不是完整的实体,那么您也可以在HQL中表达这样的查询。列值的元组将返回为Object[]

Object[] tuple = s.createQuery("SELECT t.a, t.b, t.c FROM SomeEntity t WHERE ...").uniqueResult();

答案 1 :(得分:0)

如果您使用自定义NamingStrategy(或标准的),则可以使用NamingStrategy类从属性名称生成列名。

NamingStrategy namingStrategy = new DefaultNamingStrategy();
String yourPropertyName="fooBar";
String columnName = namingStrategy.propertyToColumnName(yourPropertyName);