【问题标题】:JPA: How to create a DAO class?JPA:如何创建 DAO 类?
【发布时间】:2011-11-11 16:37:00
【问题描述】:

我这样设计一个 DAO 类:

public void Class(Class object){

    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("persistUnit");
    EntityManager entityManager = entityManagerFactory.createEntityManager();

    entityManager.getTransaction().begin();
    entityManager.persist(object);
    entityManager.getTransaction().commit();

    entityManagerFactory.close();
    entityManager.close();

}

这是我的 persistence.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="persistUnit" transaction-type="RESOURCE_LOCAL">
        //.. classes
        <properties>
            <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://<hostname>:3306/<schema>"/>
            <property name="javax.persistence.jdbc.user" value="<username>"/>
            <property name="javax.persistence.jdbc.password" value="<password>"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

还有其他方法可以进行这种操作吗?我的意思是,更复杂?

我将 Eclipse Indigo 和 JPA 与 EclipseLink 2.3 一起使用。

【问题讨论】:

    标签: jpa persistence jpa-2.0


    【解决方案1】:

    好吧,如果问题是如何设计 DAO,您可以在不同的地方找到大量文档,例如 Java EE Pattern Catalog

    现在,我想我没有得到你的代码。你真的有一个名为“类”的方法吗? (鉴于“Class”是保留字,我认为这是不可能的,不是吗?)

    无论如何,假设名称正确且可能,如果该方法是 DAO 的公共接口的一部分,那么您可能会考虑基于以下想法进行重新设计:

    您不会在方法中一遍又一遍地初始化实体管理器工厂来执行事务。这项任务非常昂贵(在计算方面意味着它消耗大量时间和资源)。因此,您通常会在应用程序的生命周期内初始化一次工厂,并使用它来创建应用程序需要的任意数量的实体管理器。

    根据您正在构建的应用程序类型,实体管理器的处理方式有所不同。例如,Java EE 应用程序可以利用容器管理的事务和应用程序上下文共享。假设您的代码是 JSE 应用程序的代码,您可以做以下两件事之一:a) 您可以创建一个实体管理器并与所有 DAO 共享,或者您可以为每个用户对话创建一个实体管理器(最常见的是通过事务) 并找到一种注入 DAO 的方法。

    您可能想看看Google Juice,他们有一种巧妙的方法,可以使用其控制反转框架向 POJO 注入实体管理器和事务支持。

    您可能想查看有关 JPA 实体管理器上下文如何工作的其他答案 Does EntityManager's find() method create new instance of JPA class?

    【讨论】:

    • Java 区分大小写。 Class() 作为方法名是完全有效的,但 class() 不是。反正我确实不会用。
    • 没有edalorzo,它只是用作示例=)
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多