日期:2014-05-16  浏览次数:20521 次

hibernate连载三:Annotation注解数据库ID生成策略
Hibernate的Annotation的主键ID生成策略有13种之多,这里介绍一种通杀的跨数据库平台的主键生成方式.
要想使用hibernate的Annotation注解需要下载hibernate-annotations-3.4.0.GA.zip解压把其中的
hibernate-annotation.jar
ejb3-persistence.jar
hibernate-commons-annotation.jar丢到项目中,其写Annotation注解比写xml很是方便很多,其极力推从使用Annotation注解.
package org.huawei.hibernate;

import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * @作者: 何枫
 * @日期: 2011-4-2下午11:01:52
 * @版本: V 1.0
 * @标题: Teacher.java
 * @包名: org.huawei.hibernate
 * @描述: TODO(用一句话描述该文件做什么)
 */
@Entity
//@Entity 注解将一个类声明为实体 Bean
//@Table(name="_Teacher")======>数据库表别名
public class Teacher {
	private int id;

	private String name;

	private String title;
	
	private Date date;
	
	private zhicheng zhicheng;
        
	//一种可行性的跨数据库平台的数据库主键生成策略.(重点)
		 @TableGenerator(
				 name = "CardPkGen",  
			     table = "Teacher_GEN",  
			     pkColumnName = "pk_key",   
			     pkColumnValue = "pk_value",   
			     valueColumnName = "Teacher",   
			   	 allocationSize = 1  ) 
		 @Id  
		 @GeneratedValue(strategy=GenerationType.TABLE,generator="CardPkGen")  
		//@GeneratedValue(strategy=GenerationType.IDENTITY)
		/*
		 * @GeneratedValue:定义主键生成策略,这里因为使用的是TableGenerator,所以,主键的生成策略为GenerationType.TABLE,生成主键策略的名称则为前面定义的"CardPkGen”。
		 * @TableGenerator各属性含义如下:
		 * name:表示该表主键生成策略的名称,这个名字可以自定义,它被引用在@GeneratedValue中设置的"generator"值中
		 * table:表示表生成策略所持久化的表名,说简单点就是一个管理其它表主键的表,本例中,这个表名为ID_GEN
		 * pkColumnName:表生成器中的列名,用来存放其它表的主键键名,一般来说一个主键键名对应一张其他表要获取主键值对应的key。这个值要与数据库的列对应,比如GEN_NAME对应id_gen中的主键名称
		 * pkColumnValue:该实体所要访问对应主键生成表的主键的key值
		 * valueColumnName:表生成器所要对应pkColumnName主键的下一个值,这个值也要和表生成器中的列名对应
		 * allocationSize:表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50
		 */
 
	/*
	 * @GeneratedValue —— 注解声明了主键的生成策略。该注解有如下属性  
	 * strategy 指定生成的策略(JPA定义的),这是一个GenerationType。默认是GenerationType. AUTO  
	 * GenerationType.AUTO 主键由程序控制  
	 * GenerationType.TABLE 使用一个特定的数据库表格来保存主键  
	 * GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型)只用于mysql,Sqlserver  
	 * GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。(这个值要与generator一起使用)  
	 * generator 指定生成主键使用的生成器(可能是orcale中的序列)。 
	 */

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	//@Basic加不加都行
	//@Column=====>更改表字段名
	//不需要的字段不写到数据库用@Temporal
	//xml是的方式是不写
	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}
	
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	//时间精度注解
	//@Temporal(TemporalType.DATE)
	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}
	//Annotation处理枚举leix
	@Enumerated(EnumType.STRING)
	//@Enumerated(EnumType.ORDINAL)
	public zhicheng getZhicheng() {
		return zhicheng;
	}

	public void setZhicheng(zhicheng zhicheng) {
		this.zhicheng = zhicheng;
	}
}