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

标签 java eclipse hibernate jakarta-ee hibernate-tools

我正在使用: Eclipse Java EE IDE Web 开发人员 版本:靛蓝发布

使用 hibernate 工具,我是 Eclipse 中 hibernate 的新手,所以我学习了如何配置 hibernate 并生成带注释的 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;
        }
    }
}

我想我一定是在配置过程中做错了什么。 我应该如何正确设置我的类和 dao 的?

最佳答案

您如何注入(inject)您的实体管理器?从外观上看,您正在尝试在 SE 中运行企业应用程序。

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

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

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

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

您还需要一个 peristence.xml 文件,其中的持久化单元与您最终调用的“myJDBC”相匹配。

希望对您有所帮助。

编辑#1

有一个例子here我认为这会帮助你。这是一个包含 JPA、Toplink 和 MySQL 的 helloworld,尽管 MySQL 部分并不重要,如果需要,您可以切换驱动程序。

编辑 #2

还有一个例子here仅使用 hibernate (不是那么多 JPA)。

编辑 #3

我认为企业 Eclipse 工具中 hibernate 工具的输出是针对于:企业 java。话虽如此,使用现有的东西并在 EE 中运行它要容易得多。这并不是说您不能在 SE 中运行它,只是它更具挑战性。

关于这一点,每当我在没有 JPA 的情况下在 SE 中使用 hibernate 时,我都会用 Spring 对其进行扩充——这会显着减轻负载。在你让它工作之前我不会担心它,但我会考虑在你学习了一些关于 hibernate 和/或 JPA 的类(class)后查看它。

关于java - 如何在 Eclipse 中使用 Hibernate Tools 生成 DAO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251124/

相关文章:

java - 使用 Google AppEngine 作为个人网站(wordpress 博客、wiki)的 "cache"

java.lang.NullPointerException long baba1

java - Eclipse 无法在 Linux Mint 中打开,Java 无法在不同目录中打开

java - 如何使用 Hibernate 插入引用 mysql DB 中其他字段的外键?

java - 使用 Hibernate Criteria API 返回每组的第一行

java - 如何从文本字符串中提取变量?

java - CardView 未以编程方式添加到 LinearLayout

java - Hibernate HQL 查询子选择或联接

java - Android 编程新手,有几个关于应用程序格式和样式的问题

android - Facebook Android SDK 的 key 散列无效