0

私は一週間ずっと Java EE を学ぶのに苦労してきました。私は、Restlet 2.0、Spring、Hibernate、および Maven を Netbeans 7.2 で使用して REST API を構築しています。これで、データをデータベースに永続化しようとするサービス呼び出しを行うたびに、次のメソッドがNullPointerException

@Override
public void save(T object) {
    entityManager.persist(object);
}

コードを見ると、次の部分はentityManager

protected EntityManager entityManager;

@PersistenceContext
public void setEngityManager(EntityManager entityManger) {
    this.entityManager = entityManager;
}

リンクEntityManager インジェクションの結果が NullPointerException であることがわかりました。しかし、私は自分のコードにそれを実装する方法を理解するには新しすぎます。また、Glassfish 3.1.2 を使用しています。

誰かがコードサンプルを手伝ってくれませんか?

編集/更新:

以下は、私が使用しているpersistence.xmlファイルです。MySQL と Glassfish を実行しています。WEB-INFwhich is where is or which is where persistence-context.xmlissrc/main/resourceの下に保存する必要がhibernate.cfg.xmlありますか?

<?xml version="1.0" encoding="UTF-8"?>
<persistence-unit name="pu1" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.mysite.restapi.RestletChildApplication</class>
    <properties>
            <property name="hibernate.connection.driver_class"
                    value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.url"
                    value="jdbc:mysql://localhost:3306/mydatabase" />
            <property name="hibernate.connection.username" value="myname"/>
            <property name="hibernate.connection.password" value="mypassword"/>
            <property name="show_sql" value="true" />
            <property name="dialect" value="org.hibernate.dialect.MySQLDialect" />
    </properties>
</persistence-unit>
4

3 に答える 3

0
setEntityManager 

それ以外の

setEngityManager  

タイプミスがあります。

ここのjava.netのように永続化ユニットを作成します

永続化ユニットの名前で EntityManager を注入します

@PersistenceContext(unitName="your_unit_name")
private EntityManager em;
于 2012-09-28T08:04:45.030 に答える
0

上記の回答は役に立ちます。非常に短いバージョンは、EntityManager が null である可能性が高いということです。呼び出し自体は、null ポインター例外をスローするべきではありません。

于 2021-09-17T13:31:59.193 に答える
0

Java EE 5 の場合、@PersistenceContext(unitName="your_unit_name")EJB やサーブレットなどのコンテナー管理オブジェクトのみを使用できます。

プレーンな Java クラスの使用のような非コンテナー管理オブジェクトで EntityManager オブジェクトを作成する場合は、次のサンプルを参照してください。

private EntityManagerFactory emf;

public static EntityManagerFactory getEntityManagerFactory() {
    if (emf == null) {
        emf = Persistence.createEntityManagerFactory("your_unit_name");
    }
    return emf;
}

public static EntityManager getEntityManager() {
    EntityManager entityManager = null;
    if (null != emf)
           entityManager = emf.createEntityManager();

    return entityManager;
}

Java EE 6 の場合、EntityManager を注入する方法については、CDI - Context and Dependency Injection を参照してください。

于 2012-09-28T10:27:17.040 に答える