最近需要同时用hibernate操作mysql和oracle,想着集成到一个版本,首先就要将这个主键生成器统一起来,采用@TableGenerator
以下转自:http://blog.csdn.net/EJB_JPA/archive/2008/05/09/2422370.aspx
将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,不必担心不同数据库不兼容造成的问题。
使用以下SQL脚本创建一个表“tb_generator”,并插入两条数据,SQL脚本如下所示。
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 ( 'CUSTOMER_PK',1);
INSERT INTO tb_generator ( gen_name ,gen_value ) VALUES ( 'CONTACT_PK',100);
现在有另外两个表customer和contact,它们每次新建记录时生成主键的值分别“CUSTOMER_PK”所对应的value值加1,“CONTACT_PK”所对应的value值加1。
下面就来具体看一下如何来配置主键的生成策略,以配置“customer”表为例,步骤如下。
@Id
@GeneratedValue(strategy = GenerationType.TABLE,generator="customer_gen")
@TableGenerator(name = "customer_gen",
table="tb_generator",
pkColumnName="gen_name",
valueColumnName="gen_value",
pkColumnValue="CUSTOMER_PK",
allocationSize=1
)
public Integer getId() {
return this.id;
}
注:这样注释后,便可在mysql和oracle中生成表"tb_generator",以供使用
这样,当通过以下代码创建新的实体后,表tb_generator中“CUSTOMER_PK”的value的值将自动加1,如图5.2所示。
CustomerEO customer = new CustomerEO();
customer.setName("Janet");
customer.setShortName("Jane");
entityManager.persist(customer);
分享到:
相关推荐
`@TableGenerator` 是一个JPA(Java Persistence API)注解,用于在实体类中定义自增序列的生成器,主要用于为数据库表中的主键生成唯一的ID。这篇博文链接指向的是一个关于`@TableGenerator` 使用的讨论,虽然具体...
`@GeneratedValue`注解表明该字段的值应由数据库自动生成,而`@TableGenerator`则提供了关于生成器表的详细信息,如表名、初始值、步长等。下面是一个简单的示例: ```java import javax.persistence.Entity; ...
11. **元数据注解**:@TableGenerator和@SequenceGenerator用于定义生成主键的元数据源。 通过深入学习这些注解及其用法,开发者能够熟练地在Hibernate中实现ORM,提高开发效率,减少与数据库交互的复杂度。同时,...
2. ID生成策略:Hibernate支持多种主键生成策略,如@TableGenerator、@GeneratedValue等,可自定义或使用内置策略。 三、事务管理 1. Transaction接口:负责处理数据库事务,包括开始、提交、回滚事务。在Session...
3. @SequenceGenerator:定义序列生成器,适用于Oracle等支持序列的数据库。 4. @JoinColumn:在关联关系中,定义外键所在的列。 5. @TableGenerator:非JPA标准,但提供了更灵活的主键生成策略。 四、实体生命周期...
3. **ID生成策略**:Hibernate提供了多种ID生成策略,如@TableGenerator、@GeneratedValue等,用于自动为新记录生成唯一标识符。 4. **Session接口**:它是Hibernate的主要工作单元,用于在应用程序和数据库之间...
Hibernate 提供多种主键生成策略,如 `@TableGenerator` 和 `@GeneratedValue`,用于自动生成主键值。例如,使用 `GenerationType.IDENTITY` 可以让数据库自动分配主键。 5. **Session 与 Transaction** Session ...
在此示例中,`employee_gen` 为主键生成器的名称,`ID_GEN` 为表名,`GEN_NAME` 和 `GEN_VAL` 分别为主键生成器表中的主键列和值列的名称。`initialValue` 设置为主键序列的初始值100,`allocationSize` 设置为50,...
`@TableGenerator`和`@GeneratedValue(strategy = GenerationType.TABLE)`组合使用,当需要自定义主键生成策略时,如基于表的生成器。 最后,`@Override`注解用于确保重写的方法是来自父类的,这在实现持久化接口时...
该策略通过`@TableGenerator`注解来配置生成器的细节。 - **示例代码**: ```java @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "myTablePK") @TableGenerator( name = "myTablePK", ...
- **指定主键生成策略**:如 `@SequenceGenerator` 或 `@TableGenerator`。 - **继承关系映射** - **每个类一张表**:使用 `@Inheritance(strategy = InheritanceType.SINGLE_TABLE)`。 - **每个类层次结构一张表...
7. **事件监听器(Event Listeners)**: Hibernate 允许注册监听器,监听特定的持久化事件,如对象的保存、更新、删除等,以实现特定的业务逻辑。 通过深入学习和实践《hibernate中文参考文档》中的内容,你将能够...
`@Id`注解允许指定更多的标识符映射细节,如`@GeneratedValue`用于生成策略,`@SequenceGenerator`和`@TableGenerator`用于生成器的配置。 #### 2.4.3 属性注解 - **2.4.3.1 访问类型**:`access`属性允许选择字段...
- 自定义主键生成策略,如SequenceGenerator、TableGenerator等。 12. **事件监听与拦截器** - 实现Hibernate事件监听器,监听对象的生命周期事件。 - 使用Interceptor,自定义逻辑,如对象的预加载、预更新等。...
例如,Hibernate允许通过@Entity注解标识一个类为Entity Class,@Table注解来指定对应的数据库表名,而@TableGenerator或@Id注解用于定义主键生成策略。 4. **属性和字段映射**: Entity Class的每个属性通常对应...
使用JPA(Java Persistence API)的注解,如`@TableGenerator`、`@GeneratedValue(strategy=GenerationType.TABLE)`, 可以控制自增ID的生成策略。 6. **集成测试**:JUnit和Mockito等工具可以帮助编写单元测试,`@...
- JPA提供`@TableGenerator`和`@SequenceGenerator`等策略来生成主键,同时可以通过工具如Hibernate Tools进行数据库的反向工程,自动生成实体类。 通过"sample-jpa"项目,你可以实际操作这些概念,深入理解JPA的...
此外,还可以使用第三方库如`Hibernate`的`SequenceGenerator`或`TableGenerator`,或者使用UUID生成器来创建全局唯一的主键。 在文件上传过程中,主键可能与文件名关联,用于唯一标识上传的文件。例如,服务器接收...