2011-11-28 10 views
5

È possibile accedere alle informazioni in <persistence-unit-metadata> tramite l'API Java?Accesso JPA <metadati unità di persistenza> a livello di programmazione

<persistence-unit-metadata> 
    <persistence-unit-defaults> 
     <schema>MySchema</schema> 
    </persistence-unit-defaults> 
</persistence-unit-metadata> 

Vorrei leggere lo schema "myschema" via JPA API o EclipseLink API, che è l'implementazione che uso.

Qualcosa come: entityManager.getDefaults(). GetSchema(); È possibile eseguire il cast o utilizzare qualsiasi classe EclipseLink, per questo motivo va bene.

Grazie

+0

Che cosa è che si vuole veramente raggiungere? Cosa intendi per "accedere alle informazioni"? Vuoi leggere gli elementi del tuo file 'orm.xml' attraverso l'API del provider JPA o forse ti piacerebbe leggere lo schema del database, le tabelle, le stored procedure, ...? –

+0

Vorrei accedere allo schema predefinito configurato in persistence-unit-default. Qualcosa come jpaConfig.getSchema(). Mi piacerebbe usare l'API JPA o EclipseLink. Ma non accedere direttamente all'XML, ad esempio tramite XPath, se possibile. – chris1069603

risposta

5

dopo il debug per un po 'ho trovato una soluzione per accedere allo schema di un'entità.

EntityType<MyEntity> entity = emf.getMetamodel().entity(MyEntity.class); 

EntityTypeImpl entityTypeImpl = (EntityTypeImpl) entity;   
ClassDescriptor descriptor = entityTypeImpl.getDescriptor(); 

String schema = descriptor.getDefaultTable().getTableQualifier(); 

Alla ricerca di un modo più semplice e migliore per accedere alle informazioni! Grazie mille.

+0

È inoltre possibile utilizzare, em.unwrap (Session.class) .getDescriptor (MyEntity.class) .getDefaultTable(). GetTableQualifier(); – James

+2

Oppure per ottenere il qualificatore predefinito sulla Sessione, em.unwrap (Session.class) .getLogin(). GetTabl eQualifier(); – James

0

So che questa è una vecchia questione, ma qui è un modo più semplice per ottenere il nome della tabella:

MyEntity.class.getAnnotation(javax.persistence.Entity.class).name();

0

Le risposte precedenti non ha funzionato per me. Questo è quello che ho trovato a lavorare:

String schema = em.unwrap(JpaEntityManager.class).getServerSession().getDescriptor(MyClass.class).getTables().get(0).getTableQualifier(); 

https://wiki.eclipse.org/EclipseLink/FAQ/JPA

Problemi correlati