2011-11-28 17 views
5

¿es posible acceder a la información en <persistence-unit-metadata> a través de la API de Java?Acceso JPA <persistencia-unidad-metadatos> programáticamente

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

me gustaría leer el esquema "MySchema" a través de la APP API o API EclipseLink, que es la aplicación que uso.

Algo como: entityManager.getDefaults(). GetSchema(); Está bien lanzar o usar cualquier clase de EclipseLink, eso está bien para esto.

Gracias

+0

Qué es lo que realmente quieres lograr? ¿A qué te refieres con "acceder a la información"? ¿Desea leer los elementos de su archivo 'orm.xml' a través de la API del proveedor de JPA o tal vez le gustaría leer el esquema de la base de datos, las tablas, los procedimientos almacenados, ...? –

+0

Me gustaría acceder al esquema predeterminado configurado en los valores predeterminados de la unidad de persistencia. Algo así como jpaConfig.getSchema(). Me gustaría utilizar API JPA o EclipseLink. Pero no acceda al XML directamente, por ejemplo a través de XPath, si es posible. – chris1069603

Respuesta

5

Después de la depuración por un tiempo he encontrado una solución para acceder al esquema de una entidad.

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

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

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

¡Buscando una manera más fácil y mejor de acceder a la información! Muchas gracias.

+0

También puede usar em.unwrap (Session.class) .getDescriptor (MyEntity.class) .getDefaultTable(). GetTableQualifier(); – James

+2

O para obtener el calificador predeterminado en la sesión, em.unwrap (Session.class) .getLogin(). GetTabl eQualifier(); – James

0

Sé que esto es una vieja pregunta, pero aquí es una manera más sencilla de obtener el nombre de la tabla:

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

0

Las respuestas anteriores no funcionan para mí. Esto es lo que he encontrado para trabajar:

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

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

Cuestiones relacionadas