4

私が使用している: Eclipse Java EE IDE Web Developers version:Indigo Release

休止状態ツールを使用して、私はEclipseで休止状態にするのが初めてなので、休止状態を構成し、注釈付きのPOJOを生成する方法を学びます(これは.xmlよりも優れていると思います)。

したがって、POJO と DAO を生成した後、挿入を試みますが、エンティティ マネージャーに対して「ヌル ポイント例外」を起動します。これは、休止状態ツールが dao クラスを生成する方法です。

生成された DAO を使用しようとしています:

public static void main(String[] args) {
// TODO Auto-generated method stub
    User user = new User();
    user.setEmail("valter@brainset.com.br");
    user.setPassword("123456");
    user.setReputation(0);

    DaoUser daoUser = new DaoUser();
    daoUser.persist(user);
}

生成された DAO:

package com.example.pojo;

// Generated 30/08/2011 20:43:29 by Hibernate Tools 3.4.0.CR1

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Home object for domain model class User.
 * @see com.example.pojo.User
 * @author Hibernate Tools
 */
@Stateless
public class UserHome {

    private static final Log log = LogFactory.getLog(UserHome.class);

    @PersistenceContext
    private EntityManager entityManager;

    public void persist(User transientInstance) {
        log.debug("persisting User instance");
        try {
            entityManager.persist(transientInstance);
            log.debug("persist successful");
        } catch (RuntimeException re) {
            log.error("persist failed", re);
            throw re;
        }
    }

    public void remove(User persistentInstance) {
        log.debug("removing User instance");
        try {
            entityManager.remove(persistentInstance);
            log.debug("remove successful");
        } catch (RuntimeException re) {
            log.error("remove failed", re);
            throw re;
        }
    }

    public User merge(User detachedInstance) {
        log.debug("merging User instance");
        try {
            User result = entityManager.merge(detachedInstance);
            log.debug("merge successful");
            return result;
        } catch (RuntimeException re) {
            log.error("merge failed", re);
            throw re;
        }
    }

    public User findById(Integer id) {
        log.debug("getting User instance with id: " + id);
        try {
            User instance = entityManager.find(User.class, id);
            log.debug("get successful");
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }
}

構成プロセスで何か間違ったことをしているに違いないと思います。クラスとダオを正しく設定するにはどうすればよいですか?

4

1 に答える 1

4

エンティティマネージャーにどのように注入していますか?見た目では、SEでエンタープライズアプリケーションを実行しようとしています。

これをSEで実行する必要がある場合(したがって「メイン」メソッド)、永続化エンジンを何らかの方法でブートストラップする必要があります。

私は通常、エンティティマネージャーにセッターを提供するか、抽象ゲッターを提供します。そこから、次のようなことができます。

    _entityManagerFactory = Persistence.createEntityManagerFactory( "myJDBC" );
    _entityManager = _entityManagerFactory.createEntityManager();

    UserHome userHome = new UserHome();
    userHome.setEntityManger( _entityManager );

また、「myJDBC」と呼ぶことになったものと一致する永続性ユニットを含むperistence.xmlファイルも必要になります。

これがお役に立てば幸いです。

編集#1

ここに私があなたを助けると思う例があります。これは、JPA、Toplink、およびMySQLを備えたhelloworldですが、MySQLの部分は重要ではありませんが、必要に応じてドライバーを切り替えることができます。

編集#2

ここには、休止状態のみを使用する例もあります(JPAはそれほど多くありません)。

編集#3

エンタープライズEclipseツールの休止状態ツールからの出力はそれに向けられていると思います:エンタープライズJava。そうは言っても、持っているものをEEで実行する方がはるかに簡単です。これは、SEで実行できないということではなく、もう少し難しいということです。

その点で、JPAを使用せずにSEでHibernateを使用する場合は常に、Springで拡張します。これにより負荷が大幅に軽減されます。動作するまでは心配しませんが、休止状態やJPAについていくつかのレッスンを学んだら、それを検討することを検討します。

于 2011-08-31T00:13:49.147 に答える