DAO 클래스에 다음 메소드가 있습니다.Tridion 2011에서 Hibernate Query에서 명명 된 매개 변수를 찾을 수 없습니다.
public PublishAction findbyLatestPublishedDate(int tcmURI,int pubID) throws StorageException
{
log.info("Entering Method: JPAPublishActionDAO.PublishAction.findbyLatestPublishedDate");
StringBuilder queryBuilder = new StringBuilder();
queryBuilder.append("select pa from PublishAction pa where pa.id in(select pb.id from PublishAction pb where pb.ITEM_REFERENCE_ID=:tcmURI and pb.PUBLICATION_ID=:pubID and rownum <= 1 order by pb.LAST_PUBLISHED_DATE desc)");
Map<String, Object> queryParams = new HashMap<String, Object>();
queryParams.put("ITEM_REFERENCE_ID", tcmURI);
queryParams.put("PUBLICATION_ID", pubID);
log.debug("JPAPublishActionDAO findbyLatestPublishedDate -> queryBuilder- "+ queryBuilder.toString());
return executeQuerySingleResult(queryBuilder.toString(), queryParams);
}
그것은 오류 아래주고있다 :
2013-01-16 12:17:01,381 ERROR DeployPipelineExecutor - Original stacktrace for transaction: tcm:0-5607662-66560
java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [PUBLICATION_ID]
이 내부적으로 내 로그에 HQL에 의해 생성 된 쿼리입니다 :
2013-01-16 12:17:01,365 DEBUG QueryTranslatorImpl - SQL: select publishact0_.ID as ID66_, publishact0_.ITEM_REFERENCE_ID as ITEM2_66_, publishact0_.LAST_PUBLISHED_DATE as LAST3_66_, publishact0_.PUBLICATION_ID as PUBLICAT4_66_, publishact0_.ACTION as ACTION66_, publishact0_.FLAG as FLAG66_, publishact0_.ITEM_TYPE as ITEM7_66_, publishact0_.SCHEMA_ID as SCHEMA8_66_, publishact0_.URL as URL66_ from AUTN_ITEMS publishact0_ where publishact0_.ID in (select publishact1_.ID from AUTN_ITEMS publishact1_ where publishact1_.ITEM_REFERENCE_ID=? and publishact1_.PUBLICATION_ID=? and rownum<=1 order by publishact1_.LAST_PUBLISHED_DATE desc)
나는 PUBLICATION_ID 열뿐만 아니라 내 엔티티에 존재 볼 수 있습니다 내 SQL 테이블 에서처럼.
좋습니다.
안녕하세요 대니얼, 답장을 주셔서 감사합니다. com.microsoft.sqlserver.jdbc.SQLServerException을 말하는 order by 절에 대해 오류가 발생했습니다. 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블에서 ORDER BY 절이 잘못되었습니다. 표현식 (TOP 또는 FOR XML도 지정되지 않은 경우) –
마치 그렇게 단순하지는 않습니다. 해결 방법은 가장 쉬운 방법은 2에서 쿼리를 분할하는 것입니다. "PublishAction pb에서 pb.id를 선택하십시오. 여기서 pb.tcmuri = : tcmURI 및 pb.publicationId = : pb.lastPublishDate desc로 pubID 순서"및 seconde 1 "pa 선택 from PublishAction pa where pa.id = : myId "여기서 myId는 첫 번째 쿼리에서 온 것입니다. –
안녕하세요, 귀하의 의견으로는 명확하지 않으므로 상급자의 샘플 코드를 업데이트하십시오. –