使用@Formula对Hibernate实体的本机SQL查询将导致NullPointerException

使用@Formula对Hibernate实体的本机SQL查询将导致NullPointerException,hibernate,formula,native-sql,Hibernate,Formula,Native Sql,我有一个简单的Hibernate实体,我使用@Formula注释: @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 WHE

我有一个简单的Hibernate实体,我使用@Formula注释:

    @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)
java.lang.NullPointerException
位于org.hibernate.loader.DefaultEntityAlias.intern(DefaultEntityAlias.java:193)
位于org.hibernate.loader.DefaultEntityAlias.GetSuffixedPropertyAlias(DefaultEntityAlias.java:151)
位于org.hibernate.loader.DefaultEntityAlias.DeterminatePropertyAlias(DefaultEntityAlias.java:93)
位于org.hibernate.loader.DefaultEntityAlias。(DefaultEntityAlias.java:65)
位于org.hibernate.loader.ColumnEntityAlias(columnEntityAlias.java:45)
位于org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.generateCustomReturns(SQLQueryReturnProcessor.java:197)
位于org.hibernate.loader.custom.sql.SQLCustomQuery.(SQLCustomQuery.java:152)
位于org.hibernate.engine.query.NativeSQLQueryPlan.(NativeSQLQueryPlan.java:67)
位于org.hibernate.engine.query.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:140)
位于org.hibernate.impl.AbstractSessionImpl.getNativeSQLQueryPlan(AbstractSessionImpl.java:160)
位于org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
位于org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:179)
位于org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:236)
当我删除@Formula属性时,一切正常


我找到了这个bug报告:。但对我来说,不清楚如何解决我的问题。

事实上,这似乎是(重复的)中报告的问题。不幸的是,这个问题没有得到解决,我担心您将不得不使用HQL或提交修补程序(您可以从对该问题进行投票开始,但鉴于这个问题已经存在了将近四年,我不希望快速解决)。

我们可以使用currentSession.createQuery()而不是currentSession.createSQLQuery()。查询将略有不同


简单地说,不要使用createNativeQuery,只使用createQuery。。
或者使用getter convat进行过渡

几年后,我仍然偶然发现了这个错误:(我对Hibernate 5.4.3有同样的问题。最后请提供一些示例