JPA:如何创建一个DAO类?
我设计一个DAO类是这样的:JPA:如何创建一个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>
这里也有一些其他的方式做这种手术?我的意思是,更复杂?
我在EclipseLink 2.3中使用Eclipse Indigo和JPA。
好吧,如果问题是如何设计一个DAO,你可以在不同的地方找到大量的文档,如Java EE Pattern Catalog。
现在,我不认为我得到您的代码。你真的有一个名为“类”的方法? (我不认为这是可能的,因为“类”是保留字,不是吗?)
无论如何,假设名称是正确和可能的,如果该方法是您的DAO的公共接口的一部分,那么您可能会考虑根据以下想法进行重新设计:
您不需要一次又一次地初始化实体管理器工厂,只需执行一次事务即可。这项任务相当昂贵(以计算术语来说,它耗费大量时间和资源)。因此,您通常在您的应用程序的生命周期中初始化您的工厂,并使用它来创建尽可能多的实体管理器以满足您的应用程序的需要。
根据您正在构建的应用程序的类型,实体管理器的处理方式会有所不同。例如,Java EE应用程序可以利用容器管理的事务和应用程序上下文共享。假设您的代码是JSE应用程序的代码,您可以执行以下两项操作之一:a)您可以创建单个实体管理器并与所有DAO共享它,也可以为每个用户对话创建一个实体管理器(最常见的是通过事务)并找到注入您的DAO的方法。
你可能想看看Google Juice,他们有一个整洁的方式注入实体管理器和事务支持POJOs使用他们的控制框架的反演。
您可能要检查JPA实体管理器上下文如何工作 Does EntityManager's find() method create new instance of JPA class?
Java是大小写敏感的这个其他的答案。 'Class()'作为方法名是完全有效的,但'class()'不是。无论如何,我确实不会使用它。 – BalusC
没有edalorzo,它只是作为例子=) –
感谢帮助家伙 –