JPA是Java的Persistent標準,針對這個標準,不同單位有不同的實作方式,而Hibernate提供了其中一種實作的選擇。Hibernate是透過Hibernate Annotations(包含hibernate-annotations.jar、hibernate-commons- annotations.jar與ejb3-persistence.jar這些jar)和 Hibernate EntityManager(包含hibernate-entitymanager.jar這個jar) 這兩個component來進行實作。
為了免除尋找這些jar的麻煩,可以直接到Jboss Tools下載Jboss的Tool pakcage,裡面就直接包含了所有Jboss的工具,包含Hibernate。下載網址:http://www.jboss.org/tools/download (請注意不同版本的Jboss Tool需搭配不同的eclipse版本) 如下圖,可選擇Download: 下面的下載連結,把整個 package的zip下載後並解開後,再用Eclipse的add new site功能,把整個package安裝到eclipse中
安裝完後,開始下列步驟
- 打開eclipse,新增一個JPA project,填上專案名稱後按下一步
- 設定產生的程式碼要放在那個目錄下,按下一步
- 在JPA Facet對話框的上半部,先設定platform為Hibernate,然後在JPA Implementation中,設定Type為User Library。然後點選紅色框框處,以設定User Library
- 新增一個User Library Entry,為其名命後按Add Jar,到下列目錄把所有的jar檔加到這個User Library Entry下
\eclipse\plugins\org.hibernate.eclipse_3.3.1.v201006011046R-H111-GA\lib\hibernate\*.jar
\eclipse\plugins\org.hibernate.eclipse_3.3.1.v201006011046R-H111-GA\lib\tools\*.jar
\eclipse\plugins\org.hibernate.eclipse_3.3.1.v201006011046R-H111-GA\lib\annotations\*.jar
- 加完之後,回到JPA Facet對話框,勾選剛才新建的User Library
- 在JPA Facet對話框中間,點選 Add Connections
- 此時會打開Database設定對話框,設定connection名稱後,按下一步
- 在下一個對話框中,點選如下圖的圖示
- 在New Driver Definition處,選定資料庫為IBM Data Server Driver for JDBC後,點選 Jar List的tab
- 按下clear all後,重新指定db2 driver的位置
- 完成後,回到設定資料庫連結對話框。完成後,按下finish
- 回到JPA Facet,勾選下圖的設定後,按finish
- 完成後,回到File—>New—>Others ,找到 JPA下的Entities From Tables
- 一直按下一步,到下列對話框可以選擇要將那些Table Mapping成Entity。勾選完畢後,uncheck 同步class到persistence.xml,按下一步
- 對話框中會列出這些Table之間的association的關係
- 填上產生的Code要到那個package下,按完成。即自動建立這些所需的class
- 到此完成Domain class的建立。如前所述Hibernate是透過EntityManager這個Component來實作JPA的persistence。建立一個Utility class來取得EntityManager。若仔細看的話,可以發現EntityManager的角色類似Hibernate本身的Session
package test.puli.util;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;public class JPAUtil {
private static EntityManagerFactory entityManagerFactory;
static {
try {
entityManagerFactory =
Persistence.createEntityManagerFactory("Test"); //對應至persistence.xml中的persistent unit
}
catch(Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static EntityManagerFactory getEntityManagerFactory() {
return entityManagerFactory;
}
public static void shutdown() {
getEntityManagerFactory().close();
}
} - 再建立Test的class來進行測試
import java.util.List;
import javax.persistence.*;
import test.puli.model.*;
import test.puli.util.JPAUtil;public class PuliTest {
public static void main(String[] args) {
EntityManager newEntityManager =
JPAUtil.getEntityManagerFactory().createEntityManager();
EntityTransaction newEtx = newEntityManager.getTransaction();
newEtx.begin();
PatientBasicInfo patient = (PatientBasicInfo) newEntityManager.find(PatientBasicInfo.class, "12345");
System.out.println(patient.getPatientfirstname());
System.out.println(patient.getPatientlastname());
System.out.println(patient.getPatientaddress());
newEtx.commit();
newEntityManager.close();
JPAUtil.shutdown();
}
} - 修改persistence.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="Test">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2Driver"/>
<property name="hibernate.connection.password" value="db2admin"/>
<property name="hibernate.connection.url" value="jdbc:db2://localhost:50000/puli"/>
<property name="hibernate.connection.username" value="db2admin"/>
<property name="hibernate.default_schema" value="db2admin"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"/>
</properties>
</persistence-unit>
</persistence> - 執行上述的class
沒有留言:
張貼留言