2011-11-28 5 views
5

<persistence-unit-metadata>の情報にJava APIを介してアクセスできますか?JPA <persistence-unit-metadata>にプログラムでアクセス

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

私は、私が使用して実装されJPA APIまたはのEclipseLink APIを介してスキーマ「はMySchema」を読みたいです。

次のようなものがあります:entityManager.getDefaults()。getSchema(); 任意のEclipseLinkクラスをキャストまたは使用することはできますが、これは問題ありません。

は、私は、エンティティのスキーマにアクセスするための解決策を見つけしばらくデバッグしたら

+0

それはあなたが本当に達成したいことは何ですか? 「情報にアクセスする」とはどういう意味ですか? 'orm.xml'ファイルの要素をJPAプロバイダAPIを介して読んだり、データベースのスキーマ、テーブル、ストアド・プロシージャを読んでみたいですか? –

+0

私は、persistence-unit-defaultsで設定されているデフォルトのスキーマにアクセスしたいと思います。 jpaConfig.getSchema()のようなもの。私はJPA APIまたはEclipseLinkを使用したいと思います。しかし、可能であれば、XPathなどを介してXMLに直接アクセスしないでください。 – chris1069603

答えて

5

ありがとうございます。

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

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

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

情報にアクセスするより簡単な方法をお探しですか? ありがとうございます。前回の返信が私のために動作しませんでした

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

+0

また、em.unwrap(Session.class).getDescriptor(MyEntity.class).getDefaultTable()。getTableQualifier();を使用することもできます。 – James

+2

または、セッションでデフォルトの修飾子を取得するには、em.unwrap(Session.class).getLogin()。getTabl eQualifier(); – James

0

私はここで、これは古い質問ですけど、テーブル名を取得するための簡単な方法です。これは私が仕事に見つけたものです:

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

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

0

関連する問題