有没有办法让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生成的映射而不必自己检查实体上的注释的任何工具?
谢谢!
答案 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);