`

JPA的主键产生策略

    博客分类:
  • JPA
 
阅读更多
@GeneratedValue:主键的产生策略,通过strategy属性指定。

  主键产生策略通过GenerationType来指定。GenerationType是一个枚举,它定义了主键产生策略的类型。
  1、AUTO 自动选择一个最适合底层数据库的主键生成策略。如MySQL会自动对应auto increment。这个是默认选项,即如果只写@GeneratedValue,等价于@GeneratedValue(strategy=GenerationType.AUTO)。
  2、IDENTITY 表自增长字段,Oracle不支持这种方式。
  3、SEQUENCE 通过序列产生主键,MySQL不支持这种方式。
  4、TABLE 通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。不同的JPA实现商生成的表名是不同的,如 OpenJPA生成openjpa_sequence_table表,Hibernate生成一个hibernate_sequences表,而TopLink则生成sequence表。这些表都具有一个序列名和对应值两个字段,如SEQ_NAME和SEQ_COUNT。
  在我们的应用中,一般选用@GeneratedValue(strategy=GenerationType.AUTO)这种方式,自动选择主键生成策略,以适应不同的数据库移植。
  如果使用Hibernate对JPA的实现,可以使用Hibernate对主键生成策略的扩展,通过Hibernate的@GenericGenerator实现。

  @GenericGenerator(name = "system-uuid", strategy = "uuid") 声明一个策略通用生成器,name为"system-uuid",策略strategy为"uuid"。
  @GeneratedValue(generator = "system-uuid") 用generator属性指定要使用的策略生成器。
  这是我在项目中使用的一种方式,生成32位的字符串,是唯一的值。最通用的,适用于所有数据库。
分享到:
评论

相关推荐

    15_JPA详解_JPA中的联合主键.zip

    4. **性能影响**:联合主键可能会对数据库性能产生影响,因为它可能导致更大的索引和更复杂的查询计划。因此,在设计联合主键时要考虑其对数据库性能的影响。 总的来说,JPA中的联合主键是一种灵活的方式来处理那些...

    JPA注解的解释和说明.pdf

    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="repair_seq"):此注解用于指定主键生成策略,其中strategy参数指定了生成策略类型,如SEQUENCE、IDENTITY等。generator参数定义了序列生成器的名称。 ...

    Spring-data-jpa常用教程

    @Id注解表示主键字段,@GeneratedValue注解用于配置主键生成策略。 2.3 EntityManager与EntityManagerFactory EntityManager是JPA的主要接口,负责持久化操作。EntityManagerFactory是EntityManager的工厂,用于...

    java自动生成id策略

    在上述代码中,`generateId`方法是线程安全的,因为使用了`synchronized`关键字,防止多线程并发访问时产生的数据不一致问题。`ThreadLocalRandom`被用来在每个线程内部生成随机数,它比`Random`更快且更适合多线程...

    jpa_test:jpa_test

    JPA虽然方便,但可能产生N+1查询问题,需注意避免过多的JOIN操作。另外,可以利用缓存机制提高性能,例如第二级缓存。 10. **最佳实践** - 避免在循环中执行JPA查询,这可能导致大量不必要的数据库访问。 - 使用...

    double-key-portlet:带有双字段主键 PoC 的 PoC ServiceBuilder 用于测试集群设置

    2. **ServiceBuilder的使用**:学习如何配置和使用ServiceBuilder来创建和管理这种特殊的主键策略。 3. **集群配置**:探索Liferay集群的设置和管理,了解如何在集群环境中测试和部署这个portlet。 4. **并发与事务...

    Spring数据库访问之异常处理

    例如,如果在执行插入操作时主键冲突,原生的SQLException会被转换为DataIntegrityViolationException,这样我们就可以根据这个异常类型做出相应的业务处理,比如提示用户数据已存在。 除了JdbcTemplate,Spring还...

    SSH框架部分常见面试题.pdf

    Struts2 Action 的生命周期是每次运行都会产生一个新的 Action。 Struts2 Action 访问 web 内置对象 Struts2 Action 可以通过四种方式访问 web 内置对象:创建 request、session、application Map 对象;实现 ...

    hibernate api+hibernate文档/chm格式

    4. Entity:代表数据库表的实体类,通过注解@Entity声明,其中的属性对应数据库字段,@Id标识主键。 5. Mappings:使用XML或注解方式定义对象和表之间的映射关系,如@Table、@Column等。 二、Hibernate 文档 官方...

Global site tag (gtag.js) - Google Analytics