作者: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都不能相信了,还能相信谁啊!
分享到:
相关推荐
总结一下关于JPA的主键生成策略,JPA是用@GeneratedValue标记来注释的。一般的我把主键生成分成两大类。第一个就是简单的单字段主键类型,一个就是复杂的复合主键...4. Sequence:像Oracle支持Sequence的生成主键策略
springboot jpa 自动生成实体类的 文件 可以拿走直接用 Generate POJOs.groovy
idea配置数据库,反向生成实体类demo,支持lombok,swagger2注解
本资源为原创. 其中剖析了hibernate+JPA对主键的生成方式的分类,以及在真实项目中如何使用,并且剖析各种数据库间的主键序列(sequence)原理以及使用.
04_JPA详解_第一个JPA实例与JPA主键生成策略.zip
JPA主键策略(针对数据库自增字段重置后无效检查项) JPA主键生成策略会影响数据库自增字段的重置
Myeclipse通过jpa方式把数据库表自动生成注解类型的实体类,有详细的图形介绍过程,很详细。
mysql逆向生成数据库实体类,实测有效,有数据库字段注释,命名是由驼峰命名,支持格式例如:SYS_USER 生成实体类SysUser
生成JPA的实体,带annotation,包括@Entity,@Table(name=xx),@Id,@GeneratedValue,@Column(name=xx) 输出表和字段的comment,包含字段的类型长度 自动生成包名
Eclipse下配置JPA生成数据库表对应的已注解实体类(图文详解),自己亲自配置成功后截图讲解,通过数据库中的表直接生成已经注解好的实体类,很神奇...
只要1分就可获得JPA主键生成策略,很全的哦
04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略
NULL 博文链接:https://1028826685.iteye.com/blog/1523349
SpringBoot整合JPA实现自动创建数据库表自动建表,JPA逆向生成数据库表 运行环境 jdk8+tomcat9+mysql+IntelliJ IDEA+maven 项目技术(必填) springboot+jpa 数据库文件(可选) 新建一个test的数据库即可,表在...
针对JPA资料进行整理,根据传智播客的教学视频,边看边写,文档包含了jpa的基本概念,相关注解解释,及一些增删改查的demo。本文档方便了对jpa的学习与复习,快速掌握基本操作。
主要介绍了idea hibernate jpa 生成实体类的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
JPA视频教程_使用jpa映射单个实体对象
持久化类主键生成策略+例子 jpa 4种 hibernate 13种
自定义的代码生成工具,可以根据数据库表来自动生成实体类,dao层,用于Hibernate和SpringDataJPA,支持lombok注解@Data和普通方式。单独使用需要jdbc连接包和Hibernate-jpa包。 使用方法 public static void main...
背景如果文本值存储在数据类型为CHAR(n)的 Oracle 列中,则数据库在将该值保存到列之前最多n字符。 后来,尝试使用 Hibernate 或 JPA 等框架搜索具有相同值的列失败,因为搜索词没有填充到n ,导致搜索词与列中存储...