Wie kann ich alle @Entity-Klassen von einer Persistence Unit erhalten?
Ich schreibe ein eigenständiges Hilfsprogramm, das in einem Jar mit einer mit JPA-2-Anmerkungen versehenen Persistenzeinheit programmgesteuert eine Liste aller @Entity-Klassen in einer bestimmten Persistenzeinheit abrufen muss.
Ich möchte entscheiden, welcher von zwei Ansätzen der Weg ist, um diese Informationen zu erhalten, und warum. oder ob es einen anderen besseren Weg gibt, an den ich nicht gedacht habe.
Lösung 1Das Java-Programm fügt jar in den Klassenpfad ein und erstellt mithilfe von JavaSE-Methoden eine Persistenzeinheit aus den Klassen im jar. Anschließend werden die Klassen javax.persistence verwendet, um das JPA-Metamodell abzurufen und eine Liste der Klassentoken daraus abzurufen.
<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>Lösung 2
Das Programm durchsucht die Verzeichnisse und Dateien in der angegebenen JAR-Datei nach persistence.xml-Dateien und findet dann eines mit dem angegebenen Namen der Persistenzeinheit. Dann XPath die Datei, um die Liste zu erhalten<class>
XML-Elemente und lesen Sie die vollqualifizierten Klassennamen von dort. Erstellen Sie aus Namen Klassentoken.