2012-10-05 49 views
0

您好我是hibernate的新手。我讀了很多關於哪本書以及要閱讀什麼規範的線索和討論。但問題是有些線程太舊,我不知道從哪裏開始。我開始使用Developer Guide中的Hibernate規範,我認爲這太複雜了。所以我讀了一些小教程。 實際上,我被分配到一些項目,我被告知使用了Hibernate。但由於對Hibernate的瞭解不多,我完全失去了知識。在代碼中,我可以看到在Maven pom中使用了Hibernate。我發現META-INF/persistence.xml中包含:Hibernate初學者疑問

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence 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" version="1.0"> 
<persistence-unit name="EmployeeDatabase" transaction-type="JTA"> 
    <jta-data-source>java:EmpDS</jta-data-source> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<class>entity.Employee</class> 
<properties> 
    <property name="hibernate.connection.password" value="Usha" /> 
    <property name="hibernate.archive.autodetection" value="class" /> 
    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
    <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/Employee" /> 
    <property name="hibernate.connection.username" value="Usha" /> 
    <property name="hibernate.hbm2ddl.auto" value="update" /> 
    <property name="hibernate.show_sql" value="false" /> 
    </properties> 
</persistence-unit> 

我想對Hibernate的配置已經通過hibernate.cfg.xml的工作要做。但我可以在任何地方找到它。在進行查詢的代碼中,沒有提及hibernate。所有查詢都使用import javax.persistence.Query完成。所以我猜JPQL被用來做查詢。

所以我的問題是:這是真的Hibernate或JPA或什麼?

當我可以說這是使用Hibernate的持久性。

何時使用JPQL以及何時使用HQL?

請任何人都可以引導我通過這個。清楚一點,我想先學習Hibernate,然後再深入研究我的任務。但我不知道從哪裏開始。哪本書或教程是最好的。

最好的問候, Jeena

回答

5

這是真的休眠或JPA還是什麼?

JPA是一個框架,Hibernate是一個可以使用JPA框架的實現。所以不要混淆在一起。

何時使用JPQL以及何時使用HQL?

再次JPQL是一種標準語言,不僅與Hibernate綁定在一起。但是,如果您只使用Hibernate,您可能會發現HQL具有更多選項並且更加靈活。

http://en.wikipedia.org/wiki/Java_Persistence_Query_Language 參考此:

JPQL是基於Hibernate查詢語言(HQL),包括在所述休眠 對象關係映射庫較早 非標準查詢語言。

Hibernate和HQL是在JPA規範之前創建的。作爲 Hibernate 3 JPQL是HQL的一個子集。

+0

感謝您的鏈接。這與我在代碼中的查詢操作完全相同。所以這意味着我們應該只使用JPQL,因爲這是最新的。但仍然存在我對hibernate和JPA的懷疑。所以只是爲了讓我的頭腦清楚。 JPA是一種爲數據庫CRUD提供不同方法的API。而Hibernate提供了這些操作的實現並實際執行這些操作。它需要JPQL查詢並將其轉換爲SQL,並將結果返回。正確? – Jeena

2

所以我的問題是:這是真的Hibernate或JPA或什麼?

這是使用Hibernate作爲實現的JPA。

JPA是一個標準的,Hibernate是JPA標準

嘗試實施跟蹤Hibernate文檔和教程的一個,然後使用Hibernate的EntityManager使JPA標準的項目

+0

謝謝。現在我明白了......正如你所說,我的第一個猜測也是從Hibernate文檔開始。但發現非常難以遵循。 – Jeena

+0

那麼Persistence.xml vs hibernate.cfg.xml呢?我什麼時候可以使用Persistence.xml?因爲我讀的配置都是通過hibernate.cfg.xml完成​​的。 – Jeena

+0

如果您想要符合JPA的應用程序,您必須使用persistence.xml(http://docs.jboss.org/hibernate/core/4.0/hem/en-US/html/configuration.html#setup-configuration)和JPQL,所以你可以選擇從休眠轉換到任何其他的JPA實現(OpenJPA,EclipseLink等)。如果您只想使用hibernate,那麼您不需要JPA,並且您可以直接使用hibernate.cfg.xml文件和HQL,其他功能更多,但可移植性更低。 – Teg

1

的Hibernate是JPA的implemantation 。但Hiberante有更多。在Hibernate中還有其他一些方法可以將對象保存到數據庫中。作爲提及,您可以使用JPA與其他框架,如myBatis

在Hibernate中使用JPA是一種選擇。使用JPA選項時,您必須使用EntityManagerEntityManagerFactory。您必須使用persistance.xml建立您的工廠。

另一方面,您可以使用其他選項,如Criteria APIHQL。使用Hibernate特定選項時,您必須使用SessionSessionFactory。創建SessionFactory時必須使用hibernate.cfg.xml