`
mqyl1
  • 浏览: 4352 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

表生成器 @TableGenerator

阅读更多

用途:

        将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式
        也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,不必担心不同数据库不兼容造成的问题。

 

@TableGenerator注解属性解释:

         name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。

         table属性表示表生成策略所持久化的表名。

         catalog属性和schema具体指定表所在的目录名或是数据库名。

         pkColumnName属性的值表示在持久化表中,该主键生成策略所对应键值的名称。

         valueColumnName属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。

         pkColumnValue属性的值表示在持久化表中,该生成策略所对应的主键。

         initialValue表示主键初识值,默认为0。

         allocationSize表示每次主键值增加的大小,默认为50。

 

实现步骤:

        一、创建自动生成主键表

 

 

  CREATE TABLE `user_generation` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pk_user_id_name` varchar(50) DEFAULT NULL,
  `pk_user_id_value` int(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
  )

 

        二、所需jar包

 

ant-1.7.1.jar
antlr-2.7.6.jar
commons-collections-3.2.1.jar
dom4j-1.6.1.jar
hibernate-annotations-3.4.0.GA.jar
hibernate-commons-annotations-3.3.0.ga.jar
hibernate-core-3.3.2.GA.jar
hibernate-ehcache-3.3.2.GA.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
junit-4.5.jar
junit.jar
mysql-connector-java-5.0.8-bin.jar
slf4j-api-1.6.1.jar
slf4j-nop-1.6.1.jar

 

        三、创建实体类

 

 

 

package com.fk.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.TableGenerator;


/**
 * @Description	   用户实体
 * @author mqyl1
 */
@Entity	//表明该类是一个实体,与数据库对应
@Table(name="T_USER")	//对应数据库中的表名
public class User implements Serializable {

	//用户ID
	private int sid;
	
	//用户名
	private String userName;
	
	//用户密码
	private String password;

	@Id	//对应数据库中的主键
	@GeneratedValue(strategy=GenerationType.TABLE,//指定主键生成策略
					generator="PK_user")	//对应生成策略名称
	@TableGenerator(name="PK_user",	//生成策略名称
					pkColumnName="pk_user_id_name",		//主键的列名
					pkColumnValue="USER_PK",			//主键的值
					valueColumnName="pk_user_id_value",	//生成的值  列名
					table="USER_GENERATION",			//生成的表名
					//initialValue=0   [主键初识值,默认为0。]
					//catalog schema   指定表所在的目录名或是数据库名。
					allocationSize=1)  //主键每次增加的大小,默认为50
	@Column(name="pk_sid")	//对应pk_sid字段
	public int getSid() {
		return sid;
	}

	@Column(name="f_userName")	//映射字段
	public String getUserName() {
		return userName;
	}

	@Column(name="f_password")	//映射字段
	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	public void setSid(int sid) {
		this.sid = sid;
	}
	
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	public User() {
		super();
	}

	public User(String userName, String password) {
		super();
		this.userName = userName;
		this.password = password;
	}
}

 

        四、书写配置文件

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://192.168.62.51:3306/test</property>
		<property name="connection.username">root</property>
		<property name="connection.password">root</property>
		
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		
		<!-- <mapping package="com.fk.entity"/> -->
		<mapping class="com.fk.entity.User"/>
	</session-factory>
</hibernate-configuration>

 

         五、书写测试类,我采用junit-4.5.jar,使用注解方式测试

 

package com.fk.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import com.fk.entity.User;

public class UserTest {

	private Session session;
	
	//初始化session
	@Before
	public void initSession() {
		//  我们平常使用这种方式  会报	
		//  org.hibernate.MappingException: An AnnotationConfiguration instance is required to use
		//  <mapping package="com.fk.entity"/>
		//  SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
		
		//要使用下面这种方式
		SessionFactory factory = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
		session = factory.openSession();
	}
	
	@Test
	public void testAddUser() {
		User user = new User("张三","1234");
		Transaction tran = session.beginTransaction();	//开启事务
		session.save(user);		//保存用户
		tran.commit();		//提交数据
	}
	
	@Test
	public void testFindAll() {
		session.beginTransaction();
		User user = (User) session.get(User.class, 1);
		Assert.assertEquals("张三", user.getUserName());
	}
}

 

        六、添加两次数据库的内容如下

 

            1、用户表

用户表

 

              2、主键生成表

 

主键生成表

 

 

           每次添加用户时,会先到主键生成表中查询出主键的值。

  • 大小: 5.3 KB
  • 大小: 4.6 KB
0
0
分享到:
评论
1 楼 oo_key 2012-11-17  
额、对头,我刚从尚学堂学了这个东东,不错~~~

相关推荐

    spring注解详解

    - **pkColumnValue**:指定主键生成器表中主键列的初始值,同样,如果默认值不满足需求,可以进行设置。 #### 四、示例代码解析 ```java @Entity @Table(name="EMP") public class Employee implements ...

    JPA注解详解

    `@TableGenerator`注解用于配置主键生成器,特别是当主键生成策略为`GenerationType.TABLE`时。它允许我们自定义生成器的表名、分配大小、初始值等属性,以适应应用程序需求和数据库性能。 - `name`: 生成器的名称...

    GenerationType.TABLE生成策略

    `@GeneratedValue`注解表明该字段的值应由数据库自动生成,而`@TableGenerator`则提供了关于生成器表的详细信息,如表名、初始值、步长等。下面是一个简单的示例: ```java import javax.persistence.Entity; ...

    JPA注解教程

    在此示例中,`employee_gen` 为主键生成器的名称,`ID_GEN` 为表名,`GEN_NAME` 和 `GEN_VAL` 分别为主键生成器表中的主键列和值列的名称。`initialValue` 设置为主键序列的初始值100,`allocationSize` 设置为50,...

    JPA学习笔记-EJB-03JPA主键生成策略总结

    该策略通过`@TableGenerator`注解来配置生成器的细节。 - **示例代码**: ```java @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "myTablePK") @TableGenerator( name = "myTablePK", ...

    java jap API

    - `@TableGenerator`:用于配置表生成器。 #### 直接映射(Direct Mapping) - `@Basic`:用于映射基本类型的字段。 - `@Enumerated`:用于枚举类型的字段。 - `@Temporal`:用于日期和时间类型的字段。 - `@Lob`...

    hibernate-annotations-3.2.1.GA.zip

    3. @SequenceGenerator:定义序列生成器,适用于Oracle等支持序列的数据库。 4. @JoinColumn:在关联关系中,定义外键所在的列。 5. @TableGenerator:非JPA标准,但提供了更灵活的主键生成策略。 四、实体生命周期...

    EntityClass[表和视图].rar

    例如,Hibernate允许通过@Entity注解标识一个类为Entity Class,@Table注解来指定对应的数据库表名,而@TableGenerator或@Id注解用于定义主键生成策略。 4. **属性和字段映射**: Entity Class的每个属性通常对应...

    HIbernate注解详解(二)

    `@TableGenerator`和`@GeneratedValue(strategy = GenerationType.TABLE)`组合使用,当需要自定义主键生成策略时,如基于表的生成器。 最后,`@Override`注解用于确保重写的方法是来自父类的,这在实现持久化接口时...

    JPA-2 基本注解

    9. **@TableGenerator**: 用于定义自定义的主键生成器,通常配合@GeneratedValue一起使用,适用于非自动递增的主键策略,例如序列。 这些注解的使用使得开发者能够在Java代码中声明式地完成ORM配置,极大地简化了...

    JPA 批注参考

    - **@TableGenerator**: 用于定义基于表的主键生成器。 **4. 直接映射 (Direct Mapping)** - **@Basic**: 用于指定基本类型的映射,如 String、Integer 等。 - **@Enumerated**: 用于指定枚举类型的映射。 - **@...

    JPA 批注总结参考

    - `@SequenceGenerator` 和 `@TableGenerator`:定义主键生成器的配置。 4. **直接映射批注**: - `@Basic`:默认的映射方式,适用于大多数Java基本类型和枚举类型。 - `@Enumerated`:用于将枚举类型映射到...

    hibernate-annotations-3.4.0.GA.chm中文版

    11. **元数据注解**:@TableGenerator和@SequenceGenerator用于定义生成主键的元数据源。 通过深入学习这些注解及其用法,开发者能够熟练地在Hibernate中实现ORM,提高开发效率,减少与数据库交互的复杂度。同时,...

    JAVA技术开发标准.docx

    5. **主键和索引** - 使用`@TableGenerator`和`@Id`定义主键生成器,`@Table`和`@UniqueConstraint`定义表的主键和唯一性约束。如果需要复合主键,可以使用`@EmbeddedId`和`@Embeddable`。 6. **数据类型选择** - ...

    jpa 批注参考 doc 格式 提供了一个对象关系映射方法

    - `@SequenceGenerator`、`@TableGenerator`:指定主键生成器的细节。 4. **直接映射**: - `@Basic`:默认情况下,JPA自动处理基本类型的映射,但可以使用此批注进行微调。 - `@Enumerated`:将枚举类型映射为...

    jpa 标注

    - **@SequenceGenerator** / **@TableGenerator**:用于定义序列或表生成器,以生成主键值。 4. **直接映射** - **@Basic**:指定一个基本属性,如字符串或整数等。 - **@Enumerated**:用于枚举类型的映射。 -...

    注解方式ssh项目

    使用JPA(Java Persistence API)的注解,如`@TableGenerator`、`@GeneratedValue(strategy=GenerationType.TABLE)`, 可以控制自增ID的生成策略。 6. **集成测试**:JUnit和Mockito等工具可以帮助编写单元测试,`@...

Global site tag (gtag.js) - Google Analytics