Jak mogę uzyskać wszystkie klasy @Entity z jednostki trwałości?
Piszę samodzielny program narzędziowy, który, biorąc pod uwagę słoik zawierający jednostkę trwałości z adnotacjami JPA-2, musi programowo uzyskać listę wszystkich moich klas @Entity w określonej jednostce trwałości.
Chciałbym zdecydować, które z dwóch podejść byłoby sposobem na uzyskanie tych informacji i dlaczego; lub jeśli jest inny lepszy sposób, o którym nie pomyślałem.
Rozwiązanie 1Program Java umieszcza jar w ścieżce klasy, tworzy jednostkę trwałości z klas w jar przy użyciu metodologii JavaSE. Następnie używa klas javax.persistence, aby uzyskać metamodel JPA, wyciągając z niego listę żetonów klas.
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();
Rozwiązanie 2Program skanuje katalogi i pliki wewnątrz określonego jar dla plików persistence.xml, a następnie znajduje katalog o określonej nazwie jednostki trwałości. Następnie XPath plik, aby uzyskać listę<class>
Elementy XML i stamtąd w pełni kwalifikowane nazwy klas. Z nazwisk buduj żetony klas.