使用@Formula的Hibernate实体的原生SQL查询会导致NullPointerException [英] Native SQL query for an Hibernate entity using @Formula results in NullPointerException

查看:1656
本文介绍了使用@Formula的Hibernate实体的原生SQL查询会导致NullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  @Id 
我有一个简单的Hibernate实体,可以使用@Formula annuity私人长ID;

私人字符串名称;

@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)
在org.hibernate.loader.custom.sql.SQLCust < init>(SQLCustomQuery.java:152)
at org.hibernate.engine.query.NativeSQLQueryPlan。< init>(NativeSQLQueryPlan.java:67)
at org.hibernate.engine。 $ or $ $ $ b $ or $ $ b $ or $ $ $ $ $ $ $ $ $ $ $ $ $ $
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:179)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:236)

当我删除@Formula属性时,一切正常。



我发现这个错误报告: BugReport 。但对我来说,目前还不清楚如何解决我的问题。

解决方案

的确,这似乎是 HHH-2225 HHH-2536 重复)。不幸的是,这个问题并没有解决,我担心你不得不使用HQL或者提交一个补丁(你可以先就这个问题进行投票,但是我不希望快速解决这个问题差不多四年旧)。


I've got an simple Hibernate entity for which I use the @Formula annotion:

    @Id
private Long id;

private String name;

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

When I try to load an entity with a native SQL Query:

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

I get an 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)

When I remove the @Formula attribute all works fine.

I found this bug report: BugReport. But for me it's not clear how to solve my problem.

解决方案

Indeed, this seems to be the problem reported in HHH-2225 (that HHH-2536 duplicates). Unfortunately, the issue is not fixed and I'm afraid you'll have to either use HQL or submit a patch (you can start with voting on the issue but I wouldn't expect a fast resolution given that this issue is almost four years old).

这篇关于使用@Formula的Hibernate实体的原生SQL查询会导致NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆