2011-08-31 36 views
4

我使用: 的Eclipse的Java EE IDE Web開發 版本:靛藍髮布如何在Eclipse中使用Hibernate Tools生成DAO?

與Hibernate工具,我是新在Eclipse中冬眠,所以我學會了如何配置Hibernate和生成POJO與註釋(我認爲這比.xml更好)。

所以產生我的POJO的和DAO的我試圖做一個插入,但推出「零點異常」到我的實體管理器之後,這是怎麼冬眠工具正在生成DAO類:

嘗試使用DAO產生:

public static void main(String[] args) { 
// TODO Auto-generated method stub 
    User user = new User(); 
    user.setEmail("[email protected]"); 
    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

你如何注入實體經理?從外觀上看,你試圖在SE運行一個企業應用程序。

如果你確實需要在SE中運行(因此是「main」方法),你需要以某種方式引導持久化引擎。

我通常爲實體管理器提供一個setter,或者提供一個抽象的getter。從那裏,你可以做這樣的事情:

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

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

你還需要,不管你最終調用「myJDBC」持久化單元匹配一個peristence.xml文件。

我希望這會有所幫助。

編輯#1

有一個例子here,我認爲會幫助你。這是一個帶有JPA,Toplink和MySQL的helloworld,雖然MySQL部分無關緊要,但如果需要的話,可以將驅動程序切換出來。

EDIT#2

還有使用休眠只(與其說JPA)的示例here

編輯#3

我覺得從休眠工具在企業Eclipse工具的輸出是面向的是:企業Java。這就是說,採取你擁有的並且在EE中運行它要容易得多。這並不是說你不能在SE中運行它,只是它有點更具挑戰性。

在那個筆記上,每當我在沒有JPA的情況下在SE中使用hibernate時,我會用Spring來擴充它 - 這會顯着減少負載。在你開始工作之前,我不會爲此擔心,但是一旦你瞭解了關於休眠和\或JPA的一些教訓,我會考慮查看它。

+0

我不是在任何地方注入實體管理器,實際上是在使用NetBeans中的休眠之前使用會話工廠。 我運行的主要方法只是爲了測試操作是否正常,所以然後我插入然後在web項目。 我應該如何設置我的實體管理器? –

+0

我收錄了一個代碼片斷,顯示了一種你可以獲得實體管理器實例的方法。你還需要爲你的UserHome類添加一個setter。 – javamonkey79

+0

我該如何創建一個persistence.xml文件?我在哪裏放?你知道任何教程嗎? –

相關問題