В Hibernate ‹ 5.2 можно было использовать общие SQL-запросы, такие как
String sql = "select a, b, sum (c) csum from a group by a, b";
SQLQuery q = session.createSqlQuery (sql);
q
.addScalar ("a", IntegerType.INSTANCE)
.addScalar ("b", IntegerType.INSTANCE)
.addScalar ("csum", IntegerType.INSTANCE);
q.setResultTransformer (new AliasToBeanResultTransformer (RankingModel.class));
List<RankingModel> results = q.list ();
Где RankingModel
выглядит так:
public class RankingModel
{
public int a, b, csum;
}
Однако в версии 5.2 все addScalar()
, setResultTransformer()
устарели, вместо них рекомендуется использовать session.createNativeQuery()
. Ближайший эквивалент вышеизложенному у меня есть:
String sql = "select a, b, sum (c) csum from a group by a, b";
NativeQuery<RankingModel> q = session.createNativeQuery (sql, RankingModel.class);
List<RankingModel> results = q.list ();
Однако этот код не работает с:
org.hibernate.MappingException: Unknown entity: ... RankingModel] with root cause
org.hibernate.MappingException: Unknown entity: ... RankingModel
at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:620)
at org.hibernate.engine.spi.SessionFactoryImplementor.getEntityPersister(SessionFactoryImplementor.java:335)
at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.getSQLLoadable(SQLQueryReturnProcessor.java:358)
at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processRootReturn(SQLQueryReturnProcessor.java:411)
at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processReturn(SQLQueryReturnProcessor.java:378)
at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.process(SQLQueryReturnProcessor.java:180)
at org.hibernate.loader.custom.sql.SQLCustomQuery.<init>(SQLCustomQuery.java:71)
at org.hibernate.engine.query.internal.NativeQueryInterpreterStandardImpl.createQueryPlan(NativeQueryInterpreterStandardImpl.java:70)
at org.hibernate.engine.query.spi.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:213)
at org.hibernate.internal.AbstractSharedSessionContract.getNativeQueryPlan(AbstractSharedSessionContract.java:550)
at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:992)
at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:148)
Кто-нибудь знает, что мне не хватает?
RankingModel.java
? Кажется, что этот объект не имеетa
,b
иsum
в качестве переменных экземпляра. - person lxcky   schedule 10.05.2017@todo develop a new approach to result transformers
... На данный момент может не быть определенного пути миграции. Ближайшая концепция -ResultSetMapping
, но я не уверен, что она такая же гибкая, как преобразователи набора результатов. - person Thierry   schedule 10.05.2017