4

ここでNoobの質問。私はこの例/チュートリアルに従って、メインプロジェクトで発生し続ける問題を特定しようとしています。問題は、entityManagerFactoryがnullを返し続けることです(したがって、最初のJUnitテストを実行しようとするとNullPointerExceptが返されます)。

現在、Eclipse Indigo(JavaEE)-JRE7-Hibernate3.6.7およびJBoss7を使用しています。

そして、これが私のpersistence.xmlです(ここでも、チュートリアルから直接コピーパスタを取得しました)

<persistence>
        <persistence-unit name="examplePersistenceUnit" 
                          transaction-type="RESOURCE_LOCAL">
            <properties>
                <property name="hibernate.show_sql" value="false" />
                <property name="hibernate.format_sql" value="false" />

                <property name="hibernate.connection.driver_class" 
                          value="org.hsqldb.jdbcDriver" />
                <property name="hibernate.connection.url" 
                          value="jdbc:hsqldb:mem:mem:aname" />
                <property name="hibernate.connection.username" value="sa" />

                <property name="hibernate.dialect" 
                          value="org.hibernate.dialect.HSQLDialect" />
                <property name="hibernate.hbm2ddl.auto" value="create" />
            </properties>
        </persistence-unit>
    </persistence>

私がこれまでに試した/見つけたもの:

  • この問題は、persistence.xmlにリストされていない永続性ユニットを使用してファクトリを作成しようとすると発生する傾向があるようです。

  • 必要なJARがEclipseのビルドパスライブラリに含まれていることを再確認しました。これは、createEntityManagerFactory()呼び出しが短絡してnullを返す原因である可能性があることをGoogleが示唆しています(例外をスローしたりメッセージをログに記録したりするのではなく)

  • Hibernate接続の構成中に発生した可能性のあるエラーが原因である可能性がありますか?

私は過去数週間この壁にぶつかっていたので、ヘルプ/一般的な方向性のヒントが非常に高く評価されていることは言うまでもありません:D

4

1 に答える 1

2

ガストン、私はあなたのためにいくつかの提案/質問があります:

1-これは実行しようとしているコードですか?

package entity;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class PersonTest {
    private EntityManagerFactory emf;

    private EntityManager em;

    @Before
    public void initEmfAndEm() {
        BasicConfigurator.configure();
        Logger.getLogger("org").setLevel(Level.ERROR);

        emf = Persistence.createEntityManagerFactory("examplePersistenceUnit");
        em = emf.createEntityManager();
    }

    @After
    public void cleanup() {
        em.close();
    }

    @Test
    public void emptyTest() {
    }
}

そうである場合は、次の行にコメントを付けてみてください: "Logger.getLogger(" org ")。setLevel(Level.ERROR);"。または、「Logger.getLogger( "org")。setLevel(Level.ALL);」に変更します。次に、出力コンソールにエラーが表示されます。

2-persistence.xmlで、hsqldbデータベースを使用していることがわかります。正しくインストール/構成しましたか?

このデータベースがわからない場合は、MySQL、PostgreSQL、または使い慣れたデータベースを使用することをお勧めします。

3-persistence.xmlを確認します。私のは少し違います:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="App1PU" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.entities.User</class>
        <class>com.entities.Group</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://myIP:3306/mydatabase"/>
            <property name="javax.persistence.jdbc.password" value="secret"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.user" value="myUser"/>
        </properties>
    </persistence-unit>
</persistence>

Hibernateがファイルが正しくないことを通知しているため、ヘッダーには重要なXML宣言がいくつかあることに注意してください。

于 2011-10-14T14:11:37.370 に答える