以编程方式访问JPA <persistence-unit-metadata>

java jpa eclipselink

7225 观看

4回复

228 作者的声誉

是否可以<persistence-unit-metadata>通过Java API 访问信息?

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

我想通过JPA API或EclipseLink API阅读模式“MySchema”,这是我使用的实现。

类似于:entityManager.getDefaults()。getSchema(); 可以投射或使用任何EclipseLink类,这对此很好。

谢谢

作者: chris1069603 的来源 发布者: 2011 年 11 月 28 日

回应 (4)


6

228 作者的声誉

决定

调试一段时间后,我找到了一个访问实体模式的解决方案。

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

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

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

寻找更简单,更好的方式来访问信息!非常感谢。

作者: chris1069603 发布者: 29.11.2011 10:22

0

3009 作者的声誉

我知道这是一个老问题,但这里有一个更简单的方法来获取表名:

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

作者: sufinawaz 发布者: 01.03.2015 08:59

0

31 作者的声誉

之前的回复对我不起作用。这是我发现的工作:

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

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

作者: Marlon Candido Guerios 发布者: 23.07.2015 09:14

0

16 作者的声誉

我知道这是一个老帖子,但是对我来说很有用

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

从那里你可以得到:

table.catalog()
table.indexes()
table.name()
table.schema()
table.uniqueConstraints()
作者: icarus 发布者: 03.05.2019 05:50
32x32