作者:ghl116
Java Persistence API 简称JPA,它是作为EJB3.0规范( )中的附加持久规范而被开发出来。Hibernate3也使用JPA Annotation来替代以前hbm配置文件,在新项目使用了一下,感觉非常方便。但这几天出现了一个奇怪的问题。
@Entity()
@Table(name = "user_score_history")
public class UserScoreHistoryVO implements Serializable {
private int id;
private int userId;
private int scoreChange;
private int levelChange;
private String changeReason;
private String parameters;
private Timestamp createTime;
@Id
@SequenceGenerator(name="seq_user_score_history_id",sequenceName = "seq_user_score_history_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "seq_user_score_history_id")
public int getId() {
return id;
}
...
}
但是每次保存新对象时都发现id都不对,与定义的sequence不一致,每一次都起始的id值都是50的倍数,而日志里看插入时也有调用sequence的sql语句。到网上查了一下,也没有结果。郁闷!看到一个对JPA的介绍
@SequenceGenerator如果使用 批注指定一个 SEQUENCE 类型的主键生成器,则可以使用 @SequenceGenerator 批注微调该主键生成器以:
更改分配大小以匹配应用程序要求或数据库性能参数
更改初始值以匹配现有的数据模型(例如,如果基于已经为其分配或保留了一组主键值的现有数据集构建)
使用现有数据模型中预定义的序列
列出了此批注的属性。有关更多详细信息,请参阅 。有关更多详细信息,请参阅 。
表 1-42 @SequenceGenerator 属性
属性必需说明name
SequenceGenerator 的名称必须匹配其 startegy 设置为 SEQUENCE 的 GeneratedValue 的名称。
allocationSize
默认值: 50.
默认情况下,JPA 持续性提供程序使用的分配大小为 50。
如果此分配大小与应用程序要求或数据库性能参数不匹配,请将 allocationSize 设置为所需的 int 值。
initialValue
默认值: 0.
默认情况下,JPA 持续性提供程序假设持续性提供程序将所有主键值的起始值设置为 0。
如果这与现有数据模型不匹配,请将 initialValue 设置为所需的 int 值。
sequenceName
默认值:JPA 持续性提供程序分配它自己创建的序列名。
如果要使用事先存在或预定义的序列,请将 sequenceName 设置为所需的 String 名称。
allocationSize默认值: 50???是不是这个,试着把allocationSize = 1加入@SequenceGenerator,果然就对了。
唉,这个世界连sun都不能相信了,还能相信谁啊!
分享到:
相关推荐
3. **GenerationType.SEQUENCE**: 使用数据库序列来生成主键,适合Oracle等支持序列的数据库。 4. **GenerationType.TABLE**: 使用数据库中的特定表来生成主键,这种方法对多个并发的请求更安全。 5. **...
【标题】"04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略"涉及的关键知识点主要包括Java Persistence API (JPA)的基础应用、首个JPA实例的创建以及JPA主键生成策略的理解和配置。JPA是Java平台上的一个标准,...
2. **SEQUENCE**:使用数据库序列生成主键,适用于支持序列的数据库,如Oracle。 3. **TABLE**:通过数据库表生成主键,适用于不支持序列的数据库,如MySQL。 4. **UUID**:生成全局唯一的UUID字符串作为主键。 5. *...
在Java的持久化框架中,如JPA(Java Persistence API)和Hibernate,主键生成策略是数据模型设计的重要部分。主键通常是表中唯一标识记录的一列或一组列,用于确保数据的完整性和唯一性。本篇文章将深入探讨JPA的4种...
当使用该策略时,JPA会根据后端数据库的不同特性自动选择合适的主键生成方式。例如,在MySQL中,如果表的主键是自增字段,则使用数据库自身的自增功能;而在Oracle中,则会使用序列(sequence)机制。 - **示例代码*...
本文主要探讨了在使用Java Persistence API (JPA) 和 Hibernate 框架时,如何处理主键的生成,特别是针对不同数据库系统的序列(sequence)机制。 首先,序列是一种在数据库中用于生成有序整数的机制,常被用作主键...
springboot jpa 自动生成实体类的 文件 可以拿走直接用 Generate POJOs.groovy
在使用这个策略时,JPA会将主键的生成工作交由数据库完成,hibernate 不会介入。这意味着,数据库将负责生成主键,而不是hibernate。这种策略适用于大多数情况,因为它可以确保主键的唯一性和连续性。 uuid uuid是...
JPA的核心是实体(Entity),每个实体都对应数据库表的一行,而主键(Primary Key)则用来唯一标识每个实体。 ### 联合主键 在传统的关系数据库中,联合主键是由两个或更多列共同构成的,每个列的值组合起来能确保...
生成JPA的实体,带annotation,包括@Entity,@Table(name=xx),@Id,@GeneratedValue,@Column(name=xx) 输出表和字段的comment,包含字段的类型长度 自动生成包名
在这个教程中,我们将探讨如何使用MyEclipse通过JPA(Java Persistence API)方式来自动生成带有注解的实体类,这将极大地简化数据库表与Java对象之间的映射工作。 首先,我们需要配置MyEclipse的数据源。在...
在Java Persistence API (JPA) 中,联合主键(Composite Key)是指由两个或更多个字段共同组成的主键,这与单字段主键(Single Field Primary Key)相对。这种设计模式通常用于那些需要多个属性来唯一标识实体的情况...
JPA(Java Persistence API)提供了一种标准的方式来管理这些对象,使得开发者可以从数据库表自动生成对应的实体类,减轻了手动编写代码的工作量。本文将详细介绍如何在Eclipse环境中配置JPA,以便自动生成数据库表...
Oracle实体类代码生成器是一种工具,它能够自动化地根据数据库中的表结构生成对应的Java实体类代码,极大地提高了开发效率,避免了手动编写这些基础代码的繁琐工作。在Oracle数据库中,实体类通常对应于数据库中的表...
在Java世界中,Java Persistence API(JPA)是Oracle公司推出的用于对象关系映射(ORM)的标准框架,它简化了数据库操作,使开发者能够用Java对象来操作数据库记录。本教程将聚焦于JPA中的一个关键概念——联合主键...
idea配置数据库,反向生成实体类demo,支持lombok,swagger2注解
在关系型数据库中,单个字段作为主键的情况较为常见,但在某些场景下,我们需要使用多个字段共同作为主键来唯一标识表中的每一条记录,这就是所谓的“联合主键”。而在Java持久化框架(Java Persistence API,简称...
"Oracle生成实体"这一主题涉及到如何利用Oracle数据库的信息来创建Java对象,这些对象通常被称为实体类,它们在Java应用程序中作为数据模型存在,映射到数据库表的结构。 在Oracle数据库中,我们可以通过查询数据库...
每个实体类对应数据库中的一个表,表的字段会被映射为类的属性,并带有相应的注解,如`@Entity`表示这是一个实体类,`@Table`表示对应数据库表,`@Id`表示主键,`@GeneratedValue`表示主键生成策略,`@Column`表示列...
例如,对于一个实体类`User`,如果希望使用数据库的序列号生成主键,可以这样写: ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="userSeq") @...