03_hibernate5快速入门_JPA的方式

和上篇相比,本文用JPA的方式实现了相同的功能。

多添加了一个JAR,POM如下所示


		
			junit
			junit
			3.8.1
			test
		

		
			org.hibernate
			hibernate-core
			5.0.12.Final
		

		
			org.hibernate
			hibernate-entitymanager
			5.0.12.Final
			
				
					org.jboss.logging
					jboss-logging
				
				
					org.hibernate
					hibernate-core
				
				
					dom4j
					dom4j
				
				
					org.hibernate.common
					hibernate-commons-annotations
				
				
					org.hibernate.javax.persistence
					hibernate-jpa-2.1-api
				
				
					org.javassist
					javassist
				
				
					org.apache.geronimo.specs
					geronimo-jta_1.1_spec
				
			
		

		
			mysql
			mysql-connector-java
			5.1.38
		


添加了一个hibernate-entitymanagerJAR包。


之前的hibernate.cfg.xml文件,被persistence.xml文件替代了,并且,persistence.xml文件还需要放在META-INF目录下。




    
        
            Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
        

        org.hibernate.tutorial.em.Event

        
            
            
            
            

            
            
        

    



实现类,和采用注解的一样,没变化。再来看一下测试类的变化


package org.hibernate.tutorial.em;

import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import junit.framework.TestCase;

/**
 * Illustrates basic use of Hibernate as a JPA provider.
 *
 * @author Steve Ebersole
 */
public class EntityManagerIllustrationTest extends TestCase {
	private EntityManagerFactory entityManagerFactory;

	@Override
	protected void setUp() throws Exception {
		// like discussed with regards to SessionFactory, an EntityManagerFactory is set up once for an application
		// 		IMPORTANT: notice how the name here matches the name we gave the persistence-unit in persistence.xml!
		entityManagerFactory = Persistence.createEntityManagerFactory( "org.hibernate.tutorial.jpa" );
	}

	@Override
	protected void tearDown() throws Exception {
		entityManagerFactory.close();
	}

	public void testBasicUsage() {
		// create a couple of events...
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		entityManager.getTransaction().begin();
		entityManager.persist( new Event( "Our very first event!", new Date() ) );
		entityManager.persist( new Event( "A follow up event", new Date() ) );
		entityManager.getTransaction().commit();
		entityManager.close();

		// now lets pull events from the database and list them
		entityManager = entityManagerFactory.createEntityManager();
		entityManager.getTransaction().begin();
        List result = entityManager.createQuery( "from Event", Event.class ).getResultList();
		for ( Event event : result ) {
			System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() );
		}
        entityManager.getTransaction().commit();
        entityManager.close();
	}
}

EntityManagerFactory取代了之前的SessionFactory。

EntityManager取代了之前的Session。


过程中发现了一个错误

javax.persistence.PersistenceException: No Persistence provider for EntityManager named org.hibernate.tutorial.jpa
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
	at org.hibernate.tutorial.em.EntityManagerIllustrationTest.setUp(EntityManagerIllustrationTest.java:46)
	at junit.framework.TestCase.runBare(TestCase.java:125)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:131)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

查了下资料,发现是缺少JAR包。hibernate-entitymanager,赶紧加上。


源代码 https://git.oschina.net/hnzmdpan/hibernate/tree/quickstart_JPA/


最后,我建了个 QQ群622539266,Java知识交流,期待你的加入。

你可能感兴趣的:(hibernate5)