- 浏览: 241743 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (172)
- J2SE学习模块 (35)
- Oracle学习模块 (12)
- Jsp学习模块 (11)
- Servlet学习模块 (1)
- Tomcat 模块 (4)
- Struts1.x学习模块 (5)
- Spring学习模块 (2)
- Hibernate学习模块 (11)
- XML学习模块 (1)
- UML学习模块 (0)
- 算法学习模块 (6)
- 设计模式模块 (2)
- Mysql学习模块 (1)
- SQL_Server学习模块 (8)
- 项目开发模块 (10)
- 搜索引擎 (14)
- 开发工具的使用 (2)
- 面试题集 (7)
- 开发工具 (8)
- Linux (5)
- JavaFX模块 (1)
- 程序与人生 (4)
- 计算机网络 (6)
- EJB学习模块 (1)
- javascript常用模块 (2)
- 英语学习 (1)
- 程序变量命名的几条法则:匈牙利命名法 (1)
- 驼峰式大小写 (1)
- 帕斯卡命名法 (1)
- Jquery控制图片宽度及高度 (1)
- 喜讯--FireFox7.01已经支持CSS中 text-overflow ellipsis 属性 (1)
- 遍历 Map 的三种 常用方法 java (1)
- JDK自带工具Jstat (1)
- 提高 Oracle 查询 效率 建议 (1)
- 常用工具 (1)
最新评论
-
a465492689:
挺好,谢谢分享
存储过程 -
huangqinghe:
ding 顶~~~
Intellij Idea12 中文乱码问题总结 -
Redpick13:
楼主好人啊,有耐心
Java中的二维数组的定义与学习 -
dandongsoft:
神鼎飞丹砂
java.lang.NoClassDefFoundError: org/apache/lucene/index/memory/MemoryIndex -
devil__lord:
不错讲得很清楚 color=#cff
Java中的二维数组的定义与学习
最近工作中遇到了许多用表生成器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...
实例:
说明:在上面的User实体中,在定义的开始就已经用@Entity注解了User类,@Table(name="lucene_user") 注解说明了,实体User对应的数据库表名为:lucene_user.
创建表生成器数据表:tb_generator
接着插入一条数据,以下要用到:
重点,主键的登场:
@TableGenerator表生成器名称为:UserGen,数据库的表为:tb_generator 创建新的实体后"user_pk"的value的值将自动加1。
@GeneratedValue声明了表的生成策略及引用的表生成器。
再看官方Api的实例:
详细:@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.避免了数据库兼容性带来的一系列的问题.
首先,我们一起来看一下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.避免了数据库兼容性带来的一系列的问题.
发表评论
-
巧用JDK自带工具Jstat查看Gc垃圾回收之使用方法
2012-07-19 09:40 3915如何查看JVM中内存使用情况如何? JVM垃圾回收是否正常? ... -
遍历Map的三种常用方法 java
2011-11-09 12:06 28861、一般的map定义: Map<Key, Object& ... -
程序变量命名的几条法则:匈牙利命名法,驼峰式大小写,帕斯卡命名法
2011-09-07 17:54 51301.匈牙利命名法的好处: ... -
JDK源码中对当前时间的一些用法
2011-09-05 14:51 1079JDK源码中对当前时间的一些用法: String[] ... -
Eclipse安装反编译工具查看Jar包源码 JD Eclipse插件
2011-08-24 10:37 5089如何在Eclipse中安装反编译工具查看Jar包源码呢? 打 ... -
Struts2图片上传成功后,异常:java.lang.IllegalStateException
2011-07-10 18:49 19481.场景: 使用Struts2图片上传成功后出现异常: ... -
Spring Hibernate Extjs开发指南
2011-03-23 18:08 981从学习到找工作,然后再面试,最后才经历上班; 从这段时间对自 ... -
获取当前时间的前三个月 java
2011-03-17 11:14 4742获取当前时间的前三个月: Date date = n ... -
java 线程的状态与控制
2010-12-16 20:54 1122一、线程的状态 线程的主要状态有: 1.新 ... -
MyEclipse Blue 6.5 注册码 可到2013年12月
2010-12-06 09:44 1520做Java软件开发的,首选的软件工具莫非是MyEclip ... -
关于 Java Collections API 您不知道的 5 件事,第 2 部分
2010-10-24 00:28 524简介: 您可以在任何地方使用 Java™ 集合,但是一定要小心 ... -
关于 Java 常用工具您不知道的 5 件事
2010-10-24 00:25 520简介: 有些 Java™ 工具无法分类,只能算作 “有用的东西 ... -
关于 JVM 命令行标志您不知道的 5 件事
2010-10-24 00:22 764简介: Java™ 虚拟机有数百个命令行选项,被经验丰富的开发 ... -
关于 Java Database Connectivity 您不知道的 5 件事
2010-10-24 00:21 501简介: JDBC,即 Java™ Database Conne ... -
关于 Java Scripting API 您不知道的 5 件事
2010-10-24 00:17 580简介: Java™ 语言足以满足您的一些项目的需求,但是脚本语 ... -
关于 Java 性能监控您不知道的 5 件事,第 2 部分
2010-10-24 00:15 565简介: 如果 JDK 中配置有全功能分析器 JConsole ... -
关于 Java 性能监控您不知道的 5 件事,第 1 部分
2010-10-24 00:13 758简介: 责怪糟糕的代码 ... -
关于 JAR 您不知道的 5 件事
2010-10-24 00:11 404简介: 除了一些基础的 JAR 之外,许多 Java™ 开发人 ... -
关于 java.util.concurrent 您不知道的 5 件事,第 2 部分
2010-10-24 00:05 482简介: 除了具有很好的并发性的 Collections,jav ... -
关于 java.util.concurrent 您不知道的 5 件事,第 1 部分
2010-10-24 00:02 490简介: 编写能够良好执行,防止应用程序受损的多线程代码是很艰巨 ...
相关推荐
`@TableGenerator` 是一个JPA(Java Persistence API)注解,用于在实体类中定义自增序列的生成器,主要用于为数据库表中的主键生成唯一的ID。这篇博文链接指向的是一个关于`@TableGenerator` 使用的讨论,虽然具体...
`@TableGenerator`注解主要用于配合`@GeneratedValue`注解,当使用“TABLE”策略生成主键时,它可以进一步定制主键生成器的行为。在一些场景下,如主键生成器的名称难以处理、需要调整分配大小、配置初始值等,`@...
`@TableGenerator`注解用于配置主键生成器,特别是当主键生成策略为`GenerationType.TABLE`时。它允许我们自定义生成器的表名、分配大小、初始值等属性,以适应应用程序需求和数据库性能。 - `name`: 生成器的名称...
`@GeneratedValue`注解表明该字段的值应由数据库自动生成,而`@TableGenerator`则提供了关于生成器表的详细信息,如表名、初始值、步长等。下面是一个简单的示例: ```java import javax.persistence.Entity; ...
在这个例子中,我们添加了一个`Long`类型的`id`字段,并用`@GeneratedValue`和`@TableGenerator`注解来配置自动生成的策略。请注意,这仅适用于复合主键中包含自增部分的情况。 最后,确保在Hibernate配置文件(如`...
在此示例中,`employee_gen` 为主键生成器的名称,`ID_GEN` 为表名,`GEN_NAME` 和 `GEN_VAL` 分别为主键生成器表中的主键列和值列的名称。`initialValue` 设置为主键序列的初始值100,`allocationSize` 设置为50,...
该策略通过`@TableGenerator`注解来配置生成器的细节。 - **示例代码**: ```java @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "myTablePK") @TableGenerator( name = "myTablePK", ...
@Temporal用于时间类型字段的精确控制,@TableGenerator则可以自定义主键生成策略,@GeneratedValue则用于自动生成主键。 3. 支持JPA 1.0规范:3.3.0.GA版本完全支持Java Persistence API 1.0标准,这意味着开发者...
`@SequenceGenerator`和`@TableGenerator`则提供了更为灵活的主键生成机制,允许开发者指定序列或表作为主键值的来源。 #### 直接映射批注:`@Basic`, `@Enumerated`, `@Temporal`, `@Lob`, `@Transient` 这些批注...
`@TableGenerator` 注解用于指定表级别的主键生成策略。 示例代码: ```java @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "employee_seq") @TableGenerator(name = "employee_seq", table =...
使用@Id、@IdClass、@EmbeddedId、@GeneratedValue、@SequenceGenerator、@TableGenerator批注可以指定以下项之一:一个@Id、多个@Id和一个@IdClass、一个@EmbeddedId,还可以使用这些批注微调数据库维护实体身份的...
- `@TableGenerator`:用于配置表生成器。 #### 直接映射(Direct Mapping) - `@Basic`:用于映射基本类型的字段。 - `@Enumerated`:用于枚举类型的字段。 - `@Temporal`:用于日期和时间类型的字段。 - `@Lob`...
3. @SequenceGenerator:定义序列生成器,适用于Oracle等支持序列的数据库。 4. @JoinColumn:在关联关系中,定义外键所在的列。 5. @TableGenerator:非JPA标准,但提供了更灵活的主键生成策略。 四、实体生命周期...
例如,Hibernate允许通过@Entity注解标识一个类为Entity Class,@Table注解来指定对应的数据库表名,而@TableGenerator或@Id注解用于定义主键生成策略。 4. **属性和字段映射**: Entity Class的每个属性通常对应...
`@TableGenerator`和`@GeneratedValue(strategy = GenerationType.TABLE)`组合使用,当需要自定义主键生成策略时,如基于表的生成器。 最后,`@Override`注解用于确保重写的方法是来自父类的,这在实现持久化接口时...
9. **@TableGenerator**: 用于定义自定义的主键生成器,通常配合@GeneratedValue一起使用,适用于非自动递增的主键策略,例如序列。 这些注解的使用使得开发者能够在Java代码中声明式地完成ORM配置,极大地简化了...
- `@SequenceGenerator` 和 `@TableGenerator`:定义主键生成器的配置。 4. **直接映射批注**: - `@Basic`:默认的映射方式,适用于大多数Java基本类型和枚举类型。 - `@Enumerated`:用于将枚举类型映射到...
- **@TableGenerator**: 用于定义基于表的主键生成器。 **4. 直接映射 (Direct Mapping)** - **@Basic**: 用于指定基本类型的映射,如 String、Integer 等。 - **@Enumerated**: 用于指定枚举类型的映射。 - **@...
11. **元数据注解**:@TableGenerator和@SequenceGenerator用于定义生成主键的元数据源。 通过深入学习这些注解及其用法,开发者能够熟练地在Hibernate中实现ORM,提高开发效率,减少与数据库交互的复杂度。同时,...