Como posso obter todas as classes @Entity de uma unidade de persistência?
Estou escrevendo um programa utilitário autônomo que, dado um jar contendo uma unidade de persistência anotada JPA-2, precisa obter, por programação, uma lista de todas as minhas classes @Entity em uma determinada unidade de persistência.
Eu gostaria de decidir qual das duas abordagens seria o caminho a percorrer para obter essa informação e por quê; ou se há outra maneira melhor que eu não tenha pensado.
Solução 1O programa Java coloca o jar no classpath, cria a unidade de persistência das classes no jar usando as metodologias JavaSE. Em seguida, ele usa as classes javax.persistence para obter o Metamodelo JPA, retirando a lista de tokens de classe.
<code>EntityManagerFactory emf = Persistence.createEntityManagerFactory("MY_ PERSISTENCE_UNIT"); Metamodel mm = emf.getMetamodel(); // loop these, using getJavaType() from Type sub-interface to get // Class tokens for managed classes. mm.getManagedTypes(); </code>Solução 2
Programe a varredura dos diretórios e arquivos dentro do jar especificado para arquivos persistence.xml, e encontre um com o nome da unidade de persistência especificada. Em seguida, XPath o arquivo para obter a lista de<class>
Elementos XML e leia os nomes de classe completos a partir daí. De nomes, construa tokens de classe.