如何在Eclipse中使用Hibernate Tools生成DAO?

我正在使用:Eclipse Java EE IDE Web Developers版本:Indigo Release

使用hibernate工具,我是Eclipse中的hibernate的新手,所以我学习如何配置hibernate并生成带注释的POJO(我认为它优于.xml)。

因此,在生成我的POJO和DAO后,我尝试进行插入,但是向我的实体管理器启动一个’null point exception’,这就是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; } } } 

我想我必须在配置过程中做错事。 我应该如何正确设置我的课程和dao’s?

你是如何注入实体经理的? 从它的外观来看,您正试图在SE中运行企业应用程序。

如果你真的需要它在SE中运行(因此是“主”方法),你需要以某种方式引导持久性引擎。

我通常为实体管理器提供一个setter或提供一个抽象的getter。 从那里你可以做这样的事情:

  _entityManagerFactory = Persistence.createEntityManagerFactory( "myJDBC" ); _entityManager = _entityManagerFactory.createEntityManager(); UserHome userHome = new UserHome(); userHome.setEntityManger( _entityManager ); 

你还需要一个peristence.xml文件,其中一个持久性单元匹配你最终调用“myJDBC”的内容。

我希望这有帮助。

编辑#1

这里有一个例子,我认为会帮助你。 它是JPA,Toplink和MySQL的helloworld,虽然MySQL部分无关紧要,但如果需要,你可以切换你的驱动程序。

编辑#2

这里还有一个例子,它只使用hibernate(而不是JPA)。

编辑#3

我认为企业Eclipse工具中的hibernate工具的输出是针对:enterprise java。 话虽这么说,拿走你拥有的东西并在EE中运行它要容易得多。 这并不是说你不能在SE中运行它,只是它更具挑战性。

在那个注意事项上,每当我在没有JPA的SE中使用hibernate时,我会用Spring扩充它 – 这会显着降低负载。 在你开始工作之前我不会担心,但是一旦你学到了关于hibernate和\或JPA的一些课程,我会考虑一下。