1
У меня есть QueryDSL JPAQuery, который должен группироваться по календарной неделе. Я получаю исключение при вызове списка (...) на нем. Пока я заменяю все вхождения yearWeek() по году(), он отлично работает.IllegalStateException при группировке по годуWeek или неделя
код Java:
QCrmContact qCrmContact = QCrmContact.crmContact;
BooleanExpression whereClause = qCrmContact.beUserId.eq(beUserId).and(qCrmContact.crmContactTypeId.in(contactTypeIds));
JPAQuery query = new JPAQuery(entityManager);
query.from(qCrmContact).where(whereClause).orderBy(qCrmContact.createdDatetime.yearWeek().asc())
.groupBy(qCrmContact.createdDatetime.yearWeek(), qCrmContact.crmContactTypeId);
List<Tuple> rows = query.list(qCrmContact.createdDatetime.yearWeek(), qCrmContact.crmContactTypeId, qCrmContact.companyId.countDistinct());
Исключение:
Exception occurred during processing request: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode
+-[METHOD_CALL] MethodNode: '('
| +-[METHOD_NAME] IdentNode: 'yearweek' {originalText=yearweek}
| \-[EXPR_LIST] SqlNode: 'exprList'
| \-[DOT] DotNode: 'crmcontact0_.CREATED_DATETIME' {propertyName=createdDatetime,dereferenceType=ALL,propertyPath=createdDatetime,path=crmContact.createdDatetime,tableAlias=crmcontact0_,className=de.xxx.cxlbackend.database.model.CrmContact,classAlias=crmContact}
| +-[ALIAS_REF] IdentNode: 'crmcontact0_.ID' {alias=crmContact, className=de.xxx.cxlbackend.database.model.CrmContact, tableAlias=crmcontact0_}
| \-[IDENT] IdentNode: 'createdDatetime' {originalText=createdDatetime}
java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode
+-[METHOD_CALL] MethodNode: '('
| +-[METHOD_NAME] IdentNode: 'yearweek' {originalText=yearweek}
| \-[EXPR_LIST] SqlNode: 'exprList'
| \-[DOT] DotNode: 'crmcontact0_.CREATED_DATETIME' {propertyName=createdDatetime,dereferenceType=ALL,propertyPath=createdDatetime,path=crmContact.createdDatetime,tableAlias=crmcontact0_,className=de.xxx.cxlbackend.database.model.CrmContact,classAlias=crmContact}
| +-[ALIAS_REF] IdentNode: 'crmcontact0_.ID' {alias=crmContact, className=de.xxx.cxlbackend.database.model.CrmContact, tableAlias=crmcontact0_}
| \-[IDENT] IdentNode: 'createdDatetime' {originalText=createdDatetime}
Было бы хорошо для меня, чтобы использовать некоторые хак и передать родной SQL в Oracle:
to_char(CREATED_DATETIME, 'IW.YYYY')