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
Solução
- Clique com o botão direito sobre o projeto e escolha “Propriedades”;
- No lado esquerdo selecione “Bibliotecas”;
- 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”;
- 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.
- Repita os passos 1 e 2;
- 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”;
- 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.
- Utilize uma instalação nova do Netbeans ou exclua os diretórios de usuário e cache;
- Abra um projeto limpo (sem os diretórios build e dist) que utilize metamodel em seu código;
- 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