Netbeans não reconhece o JPA metamodel gerado no código fonte

Problema apresentado

Bug 218658 – Generated Sources for JPA metamodel are not recognized in source packages

Bug 178108 – IDE does not generate metamodel classes for managed JPA entities

problema-netbeans-jpa-metamodel

 

Solução

  1. Clique com o botão direito sobre o projeto e escolha “Propriedades”;
  2. No lado esquerdo selecione “Bibliotecas”;
  3. No lado direito remova as ocorrências que encontrar de “EclipseLink (JPA 2.1)” e “EclipseLink-ModelGen (JPA 2.1)” das duas abas “Compilar” e “Processador” e clique em “Ok”;
  4. Abra seu arquivo “persistence.xml” (esta é a parte mais importante, sem ela não dará certo), faça qualquer alteração (mesmo que seja um espaço no fim do arquivo, pois queremos que o Netbeans saiba que houve uma alteração neste arquivo) e salve.
  5. Repita os passos 1 e 2;
  6. No lado direito inclua na aba “Processador” primeiro a biblioteca “EclipseLink (JPA 2.1)” e depois a “EclipseLink-ModelGen (JPA 2.1)” e clique em “Ok”;
  7. Aguarde o Netbeans fazer a indexação (acompanhe a mensagem do rodapé) e tudo voltará a funcionar.

 

Explicação

  • No cache gerado adequadamente para um projeto que utiliza JPA metamodel temos:
    • ${DEFAULT_CACHEDIR_ROOT}/8.1/index/s###/java/15/classes -> *.sig, *_.sig e *.rapt
    • ${DEFAULT_CACHEDIR_ROOT}/8.1/index/s###/java/15/sources -> *_.java
  • No cache defeituoso de um projeto que utiliza JPA metamodel temos:
    • ${DEFAULT_CACHEDIR_ROOT}/8.1/index/s###/java/15/classes -> *.sig
    • ${DEFAULT_CACHEDIR_ROOT}/8.1/index/s###/java/15/sources -> empty
Unindo a solução com a explicação cheguei a conclusão de que o cache só é gerado adequadamente quando o Netbeans identifica alguma alteração no persistence.xml. Isso se dá quando o arquivo ${DEFAULT_USERDIR_ROOT}/8.1/var/filehistory/##/some-folder/some-DATA-file-thats-represents-persistence.xml-file é atualizado / alterado. Neste momento o Netbeans faz a geração adequada dos arquivos de cache eliminando o problema.

 

Como fazer o problema acontecer

Aparentemente o problema só ocorre com projetos Web.

  1. Utilize uma instalação nova do Netbeans ou exclua os diretórios de usuário e cache;
  2. Abra um projeto limpo (sem os diretórios build e dist) que utilize metamodel em seu código;
  3. Aguarde a indexação (acompanhe pelo rodapé) do Netbeans e veja o problema ocorrer.

 

Versões testadas

  • 7.1;
  • 7.3.1;
  • 8.1;
  • dev-20160729-e0576ad941f3

Your email address will not be published. Required fields are marked *