Оператор JPQL возвращает java .lang.IllegalStateException - Нет типа данных для узла: org.hibernate.hql.internal.ast.tree.MethodNode - PullRequest
0 голосов
/ 25 марта 2020

Я был вокруг Stackoverflow и проверил ряд предложений, но безуспешно.

У меня есть SELECT OPERATOR('ToChar', a.created,'MM-YYYY') AS _month, COUNT(a) FROM Account AS a GROUP BY _month запрос, который возвращает ошибку, которую, к моему разочарованию, я не смог решить.

Ошибка:

java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode 
 \-[METHOD_CALL] MethodNode: '('
    +-[METHOD_NAME] IdentNode: 'OPERATOR' {originalText=OPERATOR}
    \-[EXPR_LIST] SqlNode: 'exprList'
       +-[QUOTED_STRING] LiteralNode: ''ToChar''
       +-[DOT] DotNode: 'account0_.created' {propertyName=created,dereferenceType=PRIMITIVE,getPropertyPath=created,path=a.created,tableAlias=account0_,className=com.eoh.permasys.entities.Account,classAlias=a}
       |  +-[ALIAS_REF] IdentNode: 'account0_.id' {alias=a, className=com.eoh.permasys.entities.Account, tableAlias=account0_}
       |  \-[IDENT] IdentNode: 'created' {originalText=created}
       \-[QUOTED_STRING] LiteralNode: ''MM-YYYY''

Любой, кто может мне помочь, буду очень признателен. Спасибо.

1 Ответ

1 голос
/ 26 марта 2020

На случай, если кто-то еще столкнется с подобной проблемой. В итоге я использовал другой JPQL-запрос для достижения своей цели.

SELECT EXTRACT(MONTH FROM a.created), EXTRACT(YEAR FROM a.created), COUNT(a) FROM Account AS a GROUP BY EXTRACT(MONTH FROM a.created), EXTRACT(YEAR FROM a.created)

Затем я возвращаю List<Object[]>.

Полный метод:

public List<Object[]> countAccountsCreatedPerMonth() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("SELECT EXTRACT(MONTH FROM a.created), EXTRACT(YEAR FROM a.created), COUNT(a) FROM Account AS a GROUP BY EXTRACT(MONTH FROM a.created), EXTRACT(YEAR FROM a.created)");
            return q.getResultList();
        } finally {
            em.close();
        }
    }

Я не знаю, является ли это лучшим способом сделать это, но это определенно то, что сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...