2012-10-05 46 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