Что случилось с этим запросом HQL?

сделал я встречаюсь с быть в спящем режиме ошибкой или делаю у меня есть ошибка, которую я не вижу:

select enty.number from EntityAliasName enty
  where enty.myId in
  (
    select cons.myId from Consens cons where cons.number in
    (
      select ord.number from Orders ord where ord.customer = :customer 
      and ord.creationDate <
      (
        select max(ord.creationDate) from Orders ord where ord.customer = :customer
      )
    )
  )

то, что я действительно получаю, следующее:

org.hibernate.util.StringHelper.root(StringHelper.java:257)

Caused by: java.lang.NullPointerException
        at org.hibernate.util.StringHelper.root(StringHelper.java:257)
        at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1391)
        at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:54)
        at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1367)
        at org.hibernate.hql.ast.tree.FromElement.getIdentityColumn(FromElement.java:320)
        at org.hibernate.hql.ast.tree.IdentNode.resolveAsAlias(IdentNode.java:154)
        at org.hibernate.hql.ast.tree.IdentNode.resolve(IdentNode.java:100)
        at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:117)
        at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:113)
        at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:854)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.propertyRef(HqlSqlBaseWalker.java:1172)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.propertyRefLhs(HqlSqlBaseWalker.java:5167)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.propertyRef(HqlSqlBaseWalker.java:1133)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:1993)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:1932)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1476)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:580)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
        at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
        at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
        at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
        at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101)
        at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80)
        at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
        at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:484)
        at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:394)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)

использование: Будьте в спящем режиме 3.3.2. GA / postgresql


Обновление:

я попробовал к isloate ошибку путем попытки выполнить каждый подпункт для его собственного. я выяснил, что получаю то же исключение, просто выполнившись:

select enty.number from EntityAliasName enty

но если я выполняю следующий, это работает:

select number from EntityAliasName enty

таким образом, теперь вопрос, Почему?

возможно, я должен упомянуть это EntityAliasName псевдоним объекта, определенный через:

 ... 

Обновление 2:

Я нашел решение проблемы. Мой POJO был отображен этот путь:



  
    
    
  

  

  ...


существует проблема при наличии составного идентификатора и использовании названного свойства id: О HHH-1851 сообщает Anthony Patricio. Меняя имя свойства от id кому: entityId решенный проблема:

Благодаря MDMA для указания на меня в правильном направлении.

6
задан Community 23 May 2017 в 12:13
поделиться

1 ответ

Я нашел решение проблемы. Мой POJO был отображен таким образом:

<class name="package.EntityName"
             table="entities"
            entity-name="EntityAliasName"
            mutable="false">

  <composite-id>
    <key-property name="val1" column="val1" type="long"/>
    <key-property name="val2" column="val2" type="integer"/>
  </composite-id>

  <property name="id" column="entity_id" type="string" length="255" not-null="true"/>

  ...

</class>

есть проблема при наличии составного id и использовании свойства с именем id: HHH-1851, о которой сообщил Anthony Patricio. Изменение имени свойства с id на entityId решило проблему:

<property name="entityId" column="entity_id" 
type="string" length="255" not-null="true"/>

Спасибо mdma за указание правильного пути.

просто скопировал ответ из моего обновления выше, чтобы закрыть его как отвеченный и сохранить отношение принятия вверх

5
ответ дан 17 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: