Как создать DAO с Hibernate Tools в Eclipse? - PullRequest
4 голосов
/ 31 августа 2011

Я использую: Eclipse Java EE IDE Веб-разработчики версия: Indigo Release

с инструментами спящего режима, я новичок в спящем режиме в Eclipse, поэтому я узнаю, как настраивать спящий режим и генерировать POJO с аннотациями (что, я думаю, лучше, чем .xml).

Итак, после генерации моих POJO и DAO я пытаюсь сделать вставку, но запускаю «исключение нулевой точки» для моего менеджера сущностей, вот как инструменты hibernate генерируют классы 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;
        }
    }
}

Я думаю, что я что-то не так делаю в процессе настройки. Как правильно установить мои классы и дао?

1 Ответ

4 голосов
/ 31 августа 2011

Как ты делаешь инъекцию у своего менеджера?Судя по всему, вы пытаетесь запустить корпоративное приложение в SE.

Если вам действительно нужно это запустить в SE (отсюда и «основной» метод), вам нужно каким-то образом запустить механизм сохранения.

Я обычно предоставляю установщик менеджеру сущностей или предоставляю абстрактный получатель.Оттуда вы можете сделать что-то вроде этого:

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

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

Вам также понадобится файл peristence.xml с единицей персистентности, совпадающей с тем, что вы в конечном итоге называете «myJDBC».

Я надеюсьэто помогает.

РЕДАКТИРОВАТЬ # 1

Есть пример здесь , который, я думаю, поможет вам.Это helloworld с JPA, Toplink и MySQL, хотя часть MySQL не имеет значения, вы можете переключить свой драйвер, если потребуется.

EDIT # 2

Есть также пример здесь , который использует только спящий режим (не так много JPA).

EDIT # 3

Я думаю, что вывод изИнструменты гибернации на предприятии Инструменты Eclipse ориентированы на это: корпоративная Java.При этом гораздо проще взять то, что у вас есть, и запустить его в EE.Это не значит, что вы не можете запустить его в SE, просто это немного сложнее.

На этой ноте всякий раз, когда я использую hibernate в SE без JPA, я увеличиваю его с помощью Spring - это значительно снижает нагрузку.Я не буду беспокоиться об этом, пока вы не заработаете, но я рассмотрю его, как только вы выучите несколько уроков по спящему режиму и \ или JPA.

...