JPA(三):JPA+Hibernate基础学习(一)

2015-07-24 07:47:08 · 作者: · 浏览: 3

在该系列的第一篇文章中,我们已经提到JPA和Hibernate。下图是两者在系统架构中的作用:

\

由以上图片我们可以得出两个结论:首先JPA的主要作用就是持久化操作;其次JPA只是一种规范,它需要一种实现,正如上图显示的,Hibernate、oPenJPA等等。简单些,可以说JPA只是一套接口,本身不能完成任何事情。
而这篇博文的主要内容就是对JPA和Hibernate学习的一个总结。首先来看一个最简单的入门demo。

所需jar包:

hibernate3.jar

hibernate-cglib-repack-2.1_3.jar

slf4j-api-1.5.2.jar

javassist-3.4.GA.jar

jta-1.1.jar

antlr-2.7.6.jar

commons-collections-3.1.jar

dom4j-1.6.1.jar

ejb3-persistence.jar

hibernate-annotations.jar

hibernate-commons-annotations.jar

hibernate-entitymanager.jar

log4j.jar

slf4j-log4j12.jar

创建实体类:

/***********************************************************************
 * 模块:  BuildType.java
 * 作者:  Jones
 * 说明:  Defines the Class BuildType
 * 日期:  2014年12月2日 20:56:11
 ***********************************************************************/

package com.tgb.itoo.basic.entity;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.hibernate.annotations.GenericGenerator;

/**
 * 建筑类型
 */
@Entity
@Table(name = "TB_BuildType")  //默认情况下表名称是根据实体类名称创建的,name可以修改表名称
public class BuildType extends EntityDelete{
	
	@Id
    @GenericGenerator(name = "uuidGenerator", strategy = "com.tgb.itoo.base.util.uuid.Base58UuidGenerator")
    @GeneratedValue(generator = "uuidGenerator")
    @Column(name = "id", length = 22)
    private String id;

	/**
	 * 类型代码
	 * 
	 */
	@Column(name = "buildTypeCode", length = 255)
	private String buildTypeCode;
	/**
	 * 类型名称
	 */
	@Column(name = "buildTypeName", length = 255)
	private String buildTypeName;

	/**
	 * 建筑类型中有的建筑信息
	 */
	@JsonIgnore
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "buildType", targetEntity = Build.class)
	private Set builds = new HashSet();

	//*************************get/set方法*******************************//
	
	/**
	 * 建筑类型中有的建筑信息
	 */
	public Set getBuilds() {
		return builds;
	}


	/**
	 * 建筑类型中有的建筑信息
	 */
	public void setBuilds(Set builds) {
		this.builds = builds;
	}

	/**
	 * 类型代码
	 */
	public String getBuildTypeCode() {
		return buildTypeCode;
	}

	/**
	 * 类型代码
	 */
	public void setBuildTypeCode(String buildTypeCode) {
		this.buildTypeCode = buildTypeCode;
	}

	/**
	 * 类型名称
	 */
	public String getBuildTypeName() {
		return buildTypeName;
	}

	/**
	 * 类型名称
	 */
	public void setBuildTypeName(String buildTypeName) {
		this.buildTypeName = buildTypeName;
	}
	/**
	 * 主键id
	 */
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
}

其中主键生成策略@GeneratedValue(strategy=GenerationType.AUTO)中:

(1)值为AUTO表示根据数据库由Hibernate自动选择生成策略,也可以省略写@GeneratedValue

(2)值为IDENTITY表示主键自增长

(3)值为SEQUENCE表示主键采用序列的方式

(4)值为TABLE各个数据库都通用,但效率较低

创建完实体类之后,就需要写JPA的配置文件了。JPA规范要求配置文件在类路径的META-INF目录下放置名称为固定的的,即persistence.xml



    
    
	
	
		org.hibernate.ejb.HibernatePersistence

   		java:jboss/datasources/JcMysqlDS   		
   		
  		
  		
  		  
			
			
			
  		
	
  

其中,表示建表方式,value值为creat-drop时表示创建应用的时候建表,结束应用的时候表自动删除;值为update表示如果映射元数据不存在则建立表,如果映射元数据存在并新增加了字段则会添加到数据库表中。

测试类