描述Hibernate映射文件

在向大家详细介绍Hibernate之前,首先让大家了解下调用JPA的代码和调用Hibernate的代码,然后全面介绍Hibernate映射文件。

由于JPA是不需要配置的,代码里面已经包括了注释,所以下面附上Hibernate映射文件,为了使数据库里面更清楚一些,所以两者使用的表不是同一张表,JPA的表是带JPA前缀的,用@Table这个注释声明了这一点。

 
 
 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2.  
  3. <!DOCTYPE hibernate-mapping PUBLIC  
  4. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  5. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  6. <hibernate-mapping package="com.hadeslee.jpaentity"> 
  7. <class name="Department" table="Department"> 
  8. <id name="id" column="departId" type="long"> 
  9. <generator class="native"/> 
  10. </id> 
  11. <property name="deptName"/> 
  12. <property name="description"/> 
  13. <set name="persons"> 
  14. <key column="deptId"/> 
  15. <one-to-many class="Person"/> 
  16. </set> 
  17. </class> 
  18. <class name="Person" table="Person"> 
  19. <id name="id" column="personId" type="long"> 
  20. <generator class="native"/> 
  21. </id> 
  22. <property name="name"/> 
  23. <property name="age"/> 
  24. <many-to-one name="department" column="deptId" class="Department"/> 
  25.  </class> 
  26. </hibernate-mapping> 

调用JPA的代码如下:

 
 
 
  1. EntityManagerFactory emf = Persistence.createEntityManagerFactory("TestSSH1PU2");  
  2. EntityManager em = emf.createEntityManager();  
  3. em.getTransaction().begin();  
  4. com.hadeslee.jpaentity.Person p = new com.hadeslee.jpaentity.Person();  
  5. p.setAge(26);  
  6. p.setName("千里冰封");  
  7.  
  8. com.hadeslee.jpaentity.Department dept = em.find
    (com.hadeslee.jpaentity.Department.class, Long.valueOf("3"));  
  9. System.out.println("找到的dept=" + dept);  
  10. em.remove(dept);  
  11. em.getTransaction().commit(); 

调用Hibernate的代码如下:

 
 
 
  1. Session session = HibernateUtil.getSessionFactory().getCurrentSession();  
  2. session.getTransaction().begin();  
  3. Department dept = (Department) session.load(Department.class, 2);  
  4. session.delete(dept);  
  5. session.getTransaction().commit(); 

***发现是JPA是不能删除的,而Hibernate这边的调用可以删除,一开始我还以为是toplink的实现问题,后来特意把实现改成Hibernate的实现,也同样。所以有可能是JPA的要求必须得这样做,不能替我们自动完成一些东西,是利于安全。这可能就是标准和流行的差别吧。以上介绍Hibernate映射文件。

【编辑推荐】

  1. 描述Hibernate检查id字段
  2. Hibernate Template简单描述
  3. Hibernate DetachedCriteria学习经验
  4. 概述Hibernate equals()方法
  5. Hibernate使用Person对象
THE END