Доступ к JPA <persistence-unit-metadata> программно - PullRequest
6 голосов
/ 28 ноября 2011

возможно ли получить доступ к информации в <persistence-unit-metadata> через Java API?

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

Я хотел бы прочитать схему "MySchema" через JPA API или EclipseLink API, которая является реализацией, которую я использую.

Что-то вроде: entityManager.getDefaults (). GetSchema ();Можно использовать любой класс EclipseLink, это нормально.

Спасибо

Ответы [ 4 ]

6 голосов
/ 29 ноября 2011

После некоторой отладки я нашел решение для доступа к схеме объекта.

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

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

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

Ищете более простой и удобный способ доступа к информации! Большое вам спасибо.

0 голосов
/ 03 мая 2019

Я знаю, это старый пост, но у меня с этим работал

javax.persistence.Table table = MyEntity.class.getAnnotation(javax.persistence.Table.class)

оттуда вы можете получить:

table.catalog()
table.indexes()
table.name()
table.schema()
table.uniqueConstraints()
0 голосов
/ 23 июля 2015

Предыдущие ответы не работали для меня.Вот что я нашел для работы:

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

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

0 голосов
/ 01 марта 2015

Я знаю, что это старый вопрос, но вот более простой способ получить имя таблицы:

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

...