JPA跟单元测试的环境搭建

JPA和单元测试的环境搭建

(项目文件在 附件中)

1.创建Web工程 命名为: kubaSport

3.创建数据库

use master
go
if exists (select * from sysdatabases where name = 'kubaSport')
drop database kubaSport
go
create database kubaSport
on primary
(
name='kubaSport_data',
filename='D:\kubaSport_data.mdf',
size = 3mb,
maxsize = 200mb,
filegrowth = 1mb	
)
log on
(
name= 'kubaSport_log',
filename='D:\kubaSport_log.ldf',
size = 2mb,
filegrowth=1mb	
)
go

 

2.把MyElipse编辑器切换到 MyEclipseDatabaseExplorer项

 

建立DB Briwser 连接到kubaSport数据库

 

3. 切换回MyElipse Java编辑器

点击项目,然后点击工具栏 MyElipse —— 选择 第一项 capabilities ——选择 JPA

然后选择刚刚创建好的 DB Briwser

JPA环境就搭建好了

 

4.进行单元测试(这一步我有一点点小问题 ,麻烦大家帮我看一下)

 

(1.)创建实体类

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class ProductType {
	@Id @GeneratedValue(strategy=GenerationType.AUTO) //创建由hibernate判断的数据库主键 
	private Integer typeid;

	public Integer getTypeid() {
		return typeid;
	}

	public void setTypeid(Integer typeid) {
		this.typeid = typeid;
	}
}

 

在创建过程中:@Entity 可能会报错 直接删掉该标记:@Entity 和 import javax.persistence.Entity;

然后重新 标记:@Entity  保存就不会报错了。

 

(2.)对该类进行单元测试

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import net.liuyang.bean.product.ProductType;

import org.junit.BeforeClass;
import org.junit.Test;

public class ProductTypeTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		
	}

	@Test
	public void testGetTypeid() {
		
	}

	@Test
	public void testSetTypeid() {
	Persistence.createEntityManagerFactory("kubaSportPU");     

		
		
//		EntityManagerFactory factory = Persistence.createEntityManagerFactory("kubaSportPU");  //创建实体类管理工厂
//		EntityManager em = factory.createEntityManager();//创建实体类管理器
//		em.getTransaction().begin();//开启事务
//		em.persist(new ProductType());//这一步不太明白 字面意思是保存吧
//		em.getTransaction().commit();//提交事务
//		em.close();//关闭实体类管理器
//		factory.close();//关闭工厂
		/*
		 * 上面注释掉部分测试后会报这个错误,但是数据库仍然可以创建该实体类的数据库表
		 * java.lang.NoSuchMethodError: org.hibernate.event.PreInsertEvent.getSource()Lorg/hibernate/engine/SessionImplementor;
			at org.hibernate.validator.event.ValidateEventListener.onPreInsert(ValidateEventListener.java:172)
			at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:142)
			at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65)
			at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
			at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
			at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
			at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
			at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
			at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)
			at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)
			at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
			at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)
			at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)
			at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
			at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
			at junit.test.ProductTypeTest.testSetTypeid(ProductTypeTest.java:33)
			at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
			at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
			at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
			at java.lang.reflect.Method.invoke(Unknown Source)
			at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
			at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
			at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
			at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
			at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
			at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
			at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
			at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
			at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
			at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
			at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
			at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
			at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
			at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
			at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
			at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

		 * */

	}

}

 

1 楼 wxy5001 2010-05-13  
Persistence.createEntityManagerFactory("kubaSportPU");    

其中 kubaSportPU 这个字符串是?