2
respostas

Erro no query.ResultList

Olá pessoal,

Preciso de uma ajuda aqui, quando executo o método abaixo com asterisco na query ele roda, mas gostaria de deixar somente o campo que vou usar e deixando somente o campo me retorna o erro:

[ERROR ] An unhandled exception occurred which will be propagated to the container. [ERROR ] SRVE0777E: Exception thrown by application class 'org.eclipse.persistence.exceptions.QueryException.nullPrimaryKeyInBuildingObject:912' Exception [EclipseLink-6044] (Eclipse Persistence Services - 2.4.2.v20130514-5956486): org.eclipse.persistence.exceptions.QueryException Exception Description: The primary key read from the row [ArrayRecord( => teste teste)] during the execution of the query was detected to be null. Primary keys must not contain null. Query: ReadAllQuery(referenceClass=ParteDescricao sql="

Exception Description: The primary key read from the row [ArrayRecord( => BASE MASCARILLA)] during the execution of the query was detected to be null. Primary keys must not contain null. Query: ReadAllQuery(referenceClass=ParteDescricao sql="

Alguma idéia ? Obrigado.

//*** Método de Persistência *

public List<ParteDescricao> listByLanguage( final ParteDescricao de, final String country) {    

    StringBuilder sb = new StringBuilder ();

    sb.append("\n BEGIN");
    sb.append("\n ");
    sb.append("\n   DECLARE @country CHAR(5); ");
    sb.append("\n   SET     @country = ? ; ");
    sb.append("\n ");
    sb.append("\n SELECT top (1) 
    // ************** Aqui ocorre o problema ******************
    sb.append("\n  * 
    //sb.append("\n  P.Language
    // ********************************************************
    sb.append("\n FROM TableLanguage AS P
    sb.append("\n  WHERE P.ID = ? 
    sb.append("\n    AND (P.Language = @country
    sb.append("\n   OR SUBSTRING(P.Language,1,2) = SUBSTRING(@country,1,2)
    sb.append("\n   OR P.Language = 'EN-DD')
    sb.append("\n  ORDER BY 
    sb.append("\n          CASE WHEN P.Language = @country THEN 1
    sb.append("\n              WHEN SUBSTRING(P.Language,1,2) = SUBSTRING(@country,1,2) then 2
    sb.append("\n              ELSE 3 
    sb.append("\n          END; 
    sb.append("\n END;");

    javax.persistence.Query query = this.getEntityManager().createNativeQuery(sb.toString(), PartsDescriptionDE.class);

      int i = 1;

    if (country != null) {
        query.setParameter(i++, country);
    }

    if (de.getBkParteID) != null) {
        query.setParameter(i++, de.getBkParteID());
    }

    return query.getResultList();
}
2 respostas

Qual banco de dados você está usando e quais são os nomes das colunas?

O EclipseLink faz distinção entre maiúsculas e minúsculas em versões menos recentes por padrão, a menos que a propriedade eclipselink.jpa.uppercase-column-names esteja configurada como true.

Esse pode ser o problema para consultas nativas se o banco de dados retornar o nome da coluna como maiúsculo "ID"quando você o tiver definido como minúsculo "id".

Tente alterar as definições de coluna nas anotações para corresponder ao que seu banco de dados usa ou adicionar a propriedade com um valor true.

Otávio obrigado pelo retorno, o campo realmente está em letra maiúscula, mas mesmo depois de alterado ele continua apresentando o erro. Vi no link abaixo o mesmo problema mas não consegui enteder pois ele relata que o JPA não está encontrando um dos campos chave. Fiz o teste colocando a chave da tabela e também a descrição que preciso e o erro persistiu.

Tem alguma outra idéia ?

Desde já agradeço a atenção.

Abraço.

https://stackoverflow.com/questions/40264374/eclipselink-the-primary-key-read-from-the-row-during-the-execution-of-the-quer