`
hpjianhua
  • 浏览: 235774 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

J2EE表生成器@TableGenerator

阅读更多
最近工作中遇到了许多用表生成器TableGenerator来生成主键的项目,刚接触的朋友可能对TableGenerator 表生成器还不是很了解,因为大家如果是个人做项目练习着来玩的话,基本上都是用自增来实现TableGenerator 表生成器的功能。下面为大家来讲解一下,并附带实例;
首先,我们一起来看一下Java EE 5框架API文档的描述:
javax.persistenceAnnotation Type TableGenerator
Javax.persistence包下注解类型:TableGenerator  意思是说,TableGenerator是用来注解用的,而不是像我们平常所用的类那样:new TableGenerator();
因此,它的定义是:public @interface TableGenerator
说明:定义@interface的类型是注解类型.
接着:
This annotation defines a primary key generator that may be referenced by name when a generator element is specified for the GeneratedValue annotation. A table generator may be specified on the entity class or on the primary key field or property. The scope of the generator name is global to the persistence unit (across all generator types).  
@TableGenerator注解定义了主键生成器,当@GeneratedValue的属性'generator' 与@TableGenerator的属性'name'相同时,将引用这个表生成器。一个表产生器可能在实体类别或最初的主键域或特性上被指定, 产生器的名字对持久组件的实体。
Go on...
实例:
.........
@Entity
@Table(name="lucene_user")
public class User {
	@Id
	@GeneratedValue(strategy=GenerationType.TABLE,generator="UserGen")
	@TableGenerator(name="UserGen",table="tb_generator", pkColumnName="gen_name",pkColumnValue="user_pk", allocationSize=1)
	private int id;
	@Column(name="user_id")
	private int userId;
	
	@Column(name="name")
	private String name;
......set和get方法......
}


说明:在上面的User实体中,在定义的开始就已经用@Entity注解了User类,@Table(name="lucene_user") 注解说明了,实体User对应的数据库表名为:lucene_user.

创建表生成器数据表:tb_generator
 create table tb_generator(
 id int(20) unsigned not null auto_increment,
 gen_name varchar(255) not null,
 gen_value int(20) not null,
 primary key (id)
 );


接着插入一条数据,以下要用到:
insert into tb_generator(gen_name,gen_value) values('user_pk',1);


重点,主键的登场:
	@Id
	@GeneratedValue(strategy=GenerationType.TABLE,generator="UserGen")
	@TableGenerator(name="UserGen",table="tb_generator", pkColumnName="gen_name",pkColumnValue="user_pk", allocationSize=1)
	private int id;


@TableGenerator表生成器名称为:UserGen,数据库的表为:tb_generator 创建新的实体后"user_pk"的value的值将自动加1。

@GeneratedValue声明了表的生成策略及引用的表生成器。

再看官方Api的实例:
    Example 1:
    @Entity public class Employee {
        ...
        @TableGenerator(
            name="empGen", 
            table="ID_GEN", 
            pkColumnName="GEN_KEY", 
            valueColumnName="GEN_VALUE", 
            pkColumnValue="EMP_ID", 
            allocationSize=1)
        @Id
        @GeneratedValue(strategy=TABLE, generator="empGen")
        public int id;
        ...
    }
    
    Example 2:
    @Entity public class Address {
        ...
        @TableGenerator(
            name="addressGen", 
            table="ID_GEN", 
            pkColumnName="GEN_KEY", 
            valueColumnName="GEN_VALUE", 
            pkColumnValue="ADDR_ID")
        @Id
        @GeneratedValue(strategy=TABLE, generator="addressGen")
        public int id;
        ...
	}


详细:@TableGenerator表生成器属性
l      name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。
l      table属性表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator”。
l      catalog属性和schema具体指定表所在的目录名或是数据库名。
l      pkColumnName属性的值表示在持久化表中,该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值
l       valueColumnName属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。例如,在“tb_generator”中将“gen_value”作为主键的值
l      pkColumnValue属性的值表示在持久化表中,该生成策略所对应的主键。例如在“tb_generator”表中,将“gen_name”的值为“CUSTOMER_PK”。
l       initialValue表示主键初识值,默认为0。
l       allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。

@TableGenerator的优点:
1.适用于任何的数据库
2.方便管理主键

3.避免了数据库兼容性带来的一系列的问题.

1
0
分享到:
评论

相关推荐

    表生成器 @TableGenerator

    NULL 博文链接:https://mqyl1.iteye.com/blog/1098358

    JPA-2 基本注解

    JPA的基本注解主要包括@Entity、@Table、@Id、@GeneratedValue、@Basic、@Column、@Transient、@Temporal和@TableGenerator等。

    JPA 标注 JPA标签手册

    这是JPA标签配置手册,从ORACLE官方得到的资料,里面对JPA所有的标签都进行详细的说明。 Index of Annotations ...o @TableGenerator o @Temporal o @Transient • U o @UniqueConstraint • V o @Version

    JPA学习笔记(二)——JPA 注解

    JPA注解1.1 @Entity1.2 @Table1.3 @Id1.4 @GeneratedValue1.5 @Basic1.6 @Column1.7 @Transient1.8 @Temporal1.9 @TableGenerator 1. JPA注解 1.1 @Entity 标注在实体类上,表示此类对应一个数据表。 1.2 @Table 与...

    Hibernate注释大全收藏

    通过@SequenceGenerator 和 @TableGenerator 可以配置不同的 identifier 生成器。 table="GENERATOR_TABLE" pk-column-name="key" value-column-name="hi" pk-column-value="EMP" allocation-size="20"/> //...

    table-generator:Sublime Text 3插件,用于将类似CSV的文本转换为其他可读表格式

    表格生成器-ST3插件甲崇高文本3插件用于将CSV状文本到其它可读表格格式在适当位置。 转换器内部的功劳 。 演示:安装将存储库克隆到Sublime Text“ Packages”目录中: git clone ...

    编程狂人第十二期

    探索 Hibernate 新 TableGenerator 机制 服务好“最后一公里”,高效CDN架构经验 探索推荐引擎内部的秘密 一起 select 引起的崩溃 课堂上传纸条如何防范中间人攻击? 程序人生 《9Tech访谈录》揭秘游戏王子白泽的...

    javax.persistence.jar

    javax.persistence.TableGenerator.class javax.persistence.Temporal.class javax.persistence.TemporalType.class javax.persistence.TransactionRequiredException.class javax.persistence.Transient.class ...

Global site tag (gtag.js) - Google Analytics