`
hpjianhua
  • 浏览: 241743 次
  • 性别: 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

    `@TableGenerator` 是一个JPA(Java Persistence API)注解,用于在实体类中定义自增序列的生成器,主要用于为数据库表中的主键生成唯一的ID。这篇博文链接指向的是一个关于`@TableGenerator` 使用的讨论,虽然具体...

    spring注解详解

    `@TableGenerator`注解主要用于配合`@GeneratedValue`注解,当使用“TABLE”策略生成主键时,它可以进一步定制主键生成器的行为。在一些场景下,如主键生成器的名称难以处理、需要调整分配大小、配置初始值等,`@...

    JPA注解详解

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

    GenerationType.TABLE生成策略

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

    hibernate复合主键映射

    在这个例子中,我们添加了一个`Long`类型的`id`字段,并用`@GeneratedValue`和`@TableGenerator`注解来配置自动生成的策略。请注意,这仅适用于复合主键中包含自增部分的情况。 最后,确保在Hibernate配置文件(如`...

    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", ...

    hibernate-annotations-3.3.0.GA

    @Temporal用于时间类型字段的精确控制,@TableGenerator则可以自定义主键生成策略,@GeneratedValue则用于自动生成主键。 3. 支持JPA 1.0规范:3.3.0.GA版本完全支持Java Persistence API 1.0标准,这意味着开发者...

    jpa批注参考

    `@SequenceGenerator`和`@TableGenerator`则提供了更为灵活的主键生成机制,允许开发者指定序列或表作为主键值的来源。 #### 直接映射批注:`@Basic`, `@Enumerated`, `@Temporal`, `@Lob`, `@Transient` 这些批注...

    hibernate注解学习笔记

    `@TableGenerator` 注解用于指定表级别的主键生成策略。 示例代码: ```java @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "employee_seq") @TableGenerator(name = "employee_seq", table =...

    jpa注解详解

    使用@Id、@IdClass、@EmbeddedId、@GeneratedValue、@SequenceGenerator、@TableGenerator批注可以指定以下项之一:一个@Id、多个@Id和一个@IdClass、一个@EmbeddedId,还可以使用这些批注微调数据库维护实体身份的...

    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 批注总结参考

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

    JPA 批注参考

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

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

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

Global site tag (gtag.js) - Google Analytics