

wildFly(Ver.8.2.0.Final)上で、JPAのecipselink(Ver.2.5.1)を用いたデータアクセスの動作確認をしています。

[code]

    @Stateful(name = "PersonalInformationDaoBeanEJB")
    public class PersonalInformationDaoBean implements Serializable {
    
    private EntityManagerFactory entityManagerFactory;
    private EntityManager entityManager;
    
    public PersonalInformationDaoBean() {
    }
    
    public void connect() {
        this.entityManagerFactory = Persistence.createEntityManagerFactory("persistenceUnit");
        this.entityManager = entityManagerFactory.createEntityManager();
    }
    
    public Object loadSingleData(Class entityClass, int primaryKey) {
        try {
            return entityManager.find(entityClass, primaryKey);
        } catch (Exception ex) {
            return null;
        }
    }
    
[/code]

このクラスのメソッドを各々呼び出すことで、  
EntityManagerFactoryとEntityManagerの作成とDBへのデータ取得を行いたいのですが、  
JPAフレームワークのfindメソッドを呼ぶ際に、以下のような2つのExceptionが無作為に発生します。

[code]

    ・org.h2.jdbc.JdbcSQLException: スキーマ "SAMPLE" が見つかりません。
    ・Unknown entity bean class: class Entity.PersonalInformationEntity, please verify that this class has been marked with the @Entity annotation.
    
[/code]

ちなみに、persistence.xmlにスキーマ情報、PersonalInformationEntityには@Entityを付加しています。  
このことから、他に原因があると考えられますが、現状特定することができていません。  
どのような原因が考えられるのでしょうか？

また、以下にデータベースに対応するpersistence.xmlを載せます。  
データベースはpostgreSQLを使用し、取得対象のカラムはデータベースに作成済です。

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"
    <persistence-unit name="persistenceUnit">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>Entity.PersonalInformationEntity</class>
        <properties>
            <property name="eclipselink.jdbc.url" value="jdbc:postgresql://localhost:5432/sample"/>
            <property name="eclipselink.jdbc.driver" value="org.postgresql.Driver"/>
            <property name="eclipselink.jdbc.user" value="dummyUser"/>
            <property name="eclipselink.jdbc.password" value="dummyPass"/>
        </properties>
    </persistence-unit>
    </persistence>
    
[/code]


CC BY-SA 3.0
2015-05-14T08:41:04.557
10169
2016-01-29T06:11:30.140
2016-01-29T06:11:30.140
13122
9698
question
java java-ee jpa
JavaEEにおいて、JPAのfindメソッドで発生するエラー


自己解決しました。

persistence.xmlのプロパティを

[code]

    <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/sample"/>
    <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
    <property name="javax.persistence.jdbc.user" value="dummyUser"/>
    <property name="javax.persistence.jdbc.password" value="dummyPass"/>
    
[/code]

に変更した所、Exceptionが

[code]

    javax.resource.ResourceException: IJ000460: Error checking for a transaction
    
[/code]

に変化したため、Webで検索してみた所、[JBossDeveloper](https://developer.jboss.org/thread/227944)にトランザクションタイプが"RESOURCE_LOCAL"でないと使えない旨の記述があったので、  
persistence-unitの末尾にtransaction-type="RESOURCE_LOCAL"を追記した結果、  
主キーに一致するentityを取得することができるようになりました。


CC BY-SA 3.0
2015-05-15T09:32:42.670
10224
2015-06-17T01:51:44.630
2015-06-17T01:51:44.630
9698
9698
10169
answer