Как создать DAO с Hibernate Tools в Eclipse?
Я использую: 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 ответ
Как вы делаете инъекцию в вашем менеджере? Судя по всему, вы пытаетесь запустить корпоративное приложение в 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 не имеет значения, вы можете переключить свой драйвер, если потребуется.
РЕДАКТИРОВАТЬ № 2
Здесь также есть пример, который использует только спящий режим (не так много JPA).
РЕДАКТИРОВАТЬ № 3
Я думаю, что выход из инструментов гибернации в инструментах Eclipse для предприятий ориентирован на это: корпоративная Java. При этом гораздо проще взять то, что у вас есть, и запустить его в EE. Это не значит, что вы не можете запустить его в SE, просто это немного сложнее.
На этом примечании, всякий раз, когда я использую hibernate в SE без JPA, я увеличиваю его с помощью Spring - это значительно снижает нагрузку. Я не буду беспокоиться об этом, пока вы не заработаете, но я рассмотрю его, как только вы выучите несколько уроков по спящему режиму и \ или JPA.