Hibernate初学者怀疑

时间:2012-10-05 13:08:46

标签: java hibernate jpa hql jpql

嗨,我是hibernate的新手。我阅读了很多关于哪本书以及要阅读的规范的线程和讨论。但问题是有些线程太老了,我不明白从哪里开始。我从开发人员指南中的Hibernate规范开始,我认为这太复杂了。所以我读了一些小教程。 实际上我被分配到一些项目,我被告知使用了Hibernate。但由于对Hibernate知之甚少,我完全迷失了。在代码中我可以看到在Maven pom中使用了Hibernate。我发现META-INF / Persistence.xml包含:

 <?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

3 个答案:

答案 0 :(得分:5)

  

这真的是Hibernate或JPA还是什么?

JPA是一个框架,Hibernate是一个可以使用JPA框架的实现。所以不要把它们混为一谈。

  

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

同样,JPQL是一种标准语言,不仅与Hibernate有关。但是,如果您只使用Hibernate,您可能会发现HQL有更多选项并且更灵活。

http://en.wikipedia.org/wiki/Java_Persistence_Query_Language 参考:

  

JPQL基于早期的Hibernate查询语言(HQL)   Hibernate中包含非标准查询语言   对象关系映射库。

     

Hibernate和HQL是在JPA规范之前创建的。作为   Hibernate 3 JPQL是HQL的一个子集。

答案 1 :(得分:2)

  

所以我的问题是:这真的是Hibernate还是JPA还是什么?

这是使用Hibernate作为实现的JPA。

JPA是标准,Hibernate是JPA标准的实现之一

尝试遵循Hibernate文档和教程,然后使用Hibernate EntityManager使您的项目符合JPA

答案 2 :(得分:1)

Hibernate是JPA的实现。但是Hiberante有更多。在hibernate中还有其他方法可以将对象持久化到数据库。如上所述,您可以将JPA与myBatis等其他框架一起使用。

在Hibernate中使用JPA是一种选择。使用JPA选项时,您必须使用EntityManagerEntityManagerFactory。您必须使用persistance.xml建立您的工厂。

另一方面,您可以使用其他选项,例如Criteria APIHQL。使用Hibernate特定选项时,您必须使用SessionSessionFactory。在创建SessionFactory时必须使用hibernate.cfg.xml