2011-09-06 71 views
1

我設計一個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。

回答

2

好吧,如果問題是如何設計一個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?

+0

Java是大小寫敏感的這個其他的答案。 'Class()'作爲方法名是完全有效的,但'class()'不是。無論如何,我確實不會使用它。 – BalusC

+0

沒有edalorzo,它只是作爲例子=) –

+0

感謝幫助傢伙 –