13

@Formula アノテーションを使用する単純な Hibernate エンティティがあります。

    @Id
private Long id;

private String name;

@Formula("(select count(f.*) from foo f where f.id = id)")
private long bar;

ネイティブ SQL クエリを使用してエンティティを読み込もうとすると、次のようになります。

EM.createNativeQuery("SELECT f.*, count(something) as bar FROM foo f WHERE f.name = '...'", Entity.class)

NullPointerException が発生します。

java.lang.NullPointerException
at org.hibernate.loader.DefaultEntityAliases.intern(DefaultEntityAliases.java:193)
at org.hibernate.loader.DefaultEntityAliases.getSuffixedPropertyAliases(DefaultEntityAliases.java:151)
at org.hibernate.loader.DefaultEntityAliases.determinePropertyAliases(DefaultEntityAliases.java:93)
at org.hibernate.loader.DefaultEntityAliases.<init>(DefaultEntityAliases.java:65)
at org.hibernate.loader.ColumnEntityAliases.<init>(ColumnEntityAliases.java:45)
at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.generateCustomReturns(SQLQueryReturnProcessor.java:197)
at org.hibernate.loader.custom.sql.SQLCustomQuery.<init>(SQLCustomQuery.java:152)
at org.hibernate.engine.query.NativeSQLQueryPlan.<init>(NativeSQLQueryPlan.java:67)
at org.hibernate.engine.query.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:140)
at org.hibernate.impl.AbstractSessionImpl.getNativeSQLQueryPlan(AbstractSessionImpl.java:160)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:179)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:236)

@Formula 属性を削除すると、すべて正常に動作します。

このバグ レポートを見つけました: BugReport。しかし、私にとっては、問題を解決する方法が明確ではありません。

4

3 に答える 3

5

実際、これはHHH-2225 ( HHH-2536が重複している) で報告された問題のようです。残念ながら、この問題は修正されておらず、HQL を使用するか、パッチを提出する必要があります (問題への投票から始めることができますが、この問題はほぼ 4 年かかるため、迅速な解決は期待できません。年)。

于 2010-07-26T00:24:51.753 に答える
0

We could use currentSession.createQuery() instead of currentSession.createSQLQuery(). The query will be slightly different.

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/queryhql.html#queryhql-subqueries

于 2013-07-16T23:39:58.033 に答える