描述Hibernate映射文件
在向大家詳細(xì)介紹Hibernate之前,首先讓大家了解下調(diào)用JPA的代碼和調(diào)用Hibernate的代碼,然后全面介紹Hibernate映射文件。
由于JPA是不需要配置的,代碼里面已經(jīng)包括了注釋,所以下面附上Hibernate映射文件,為了使數(shù)據(jù)庫里面更清楚一些,所以兩者使用的表不是同一張表,JPA的表是帶JPA前綴的,用@Table這個注釋聲明了這一點。
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="com.hadeslee.jpaentity">
- <class name="Department" table="Department">
- <id name="id" column="departId" type="long">
- <generator class="native"/>
- </id>
- <property name="deptName"/>
- <property name="description"/>
- <set name="persons">
- <key column="deptId"/>
- <one-to-many class="Person"/>
- </set>
- </class>
- <class name="Person" table="Person">
- <id name="id" column="personId" type="long">
- <generator class="native"/>
- </id>
- <property name="name"/>
- <property name="age"/>
- <many-to-one name="department" column="deptId" class="Department"/>
- </class>
- </hibernate-mapping>
調(diào)用JPA的代碼如下:
- EntityManagerFactory emf = Persistence.createEntityManagerFactory("TestSSH1PU2");
- EntityManager em = emf.createEntityManager();
- em.getTransaction().begin();
- com.hadeslee.jpaentity.Person p = new com.hadeslee.jpaentity.Person();
- p.setAge(26);
- p.setName("千里冰封");
- com.hadeslee.jpaentity.Department dept = em.find
(com.hadeslee.jpaentity.Department.class, Long.valueOf("3"));- System.out.println("找到的dept=" + dept);
- em.remove(dept);
- em.getTransaction().commit();
調(diào)用Hibernate的代碼如下:
- Session session = HibernateUtil.getSessionFactory().getCurrentSession();
- session.getTransaction().begin();
- Department dept = (Department) session.load(Department.class, 2);
- session.delete(dept);
- session.getTransaction().commit();
***發(fā)現(xiàn)是JPA是不能刪除的,而Hibernate這邊的調(diào)用可以刪除,一開始我還以為是toplink的實現(xiàn)問題,后來特意把實現(xiàn)改成Hibernate的實現(xiàn),也同樣。所以有可能是JPA的要求必須得這樣做,不能替我們自動完成一些東西,是利于安全。這可能就是標(biāo)準(zhǔn)和流行的差別吧。以上介紹Hibernate映射文件。
【編輯推薦】