`
ghl116
  • 浏览: 164432 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jpa sequence allocationSize

 
阅读更多

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学习笔记-EJB-03JPA主键生成策略总结

    @SequenceGenerator(name = "mySeq", sequenceName = "MY_SEQ", initialValue = 1, allocationSize = 1) private Integer id; ``` - **属性说明**: - `sequenceName`: 序列的名称。 - `initialValue`: 序列...

    JPA注解的解释和说明.pdf

    @SequenceGenerator(name="repair_seq",sequenceName="seq_repair",allocationSize=1):此注解用于定义一个序列生成器,其中name是序列生成器的名称,sequenceName是数据库中序列的名称,allocationSize定义了每次...

    spring注解详解

    table = "SEQUENCE_TABLE", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", initialValue = 100, allocationSize = 50 ) @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "EMP...

    理解JPA注解@GeneratedValue的使用方法

    JPA注解@GeneratedValue的使用方法 ...JPA的@GeneratedValue注解可以指定主键的生成策略,包括TABLE、SEQUENCE、IDENTITY、AUTO四种标准策略。 Hibernate也提供了多种主键生成策略,用于满足不同的应用场景。

    JPA注解详细解释、EJB3、 Hibernate开发

    - `allocationSize`:每次递增的大小。 - `strategy`:生成策略,包括`AUTO`(由框架决定)、`IDENTITY`(依赖于数据库的自动增长机制)、`SEQUENCE`(基于数据库的序列)和`TABLE`(基于单独的表)。 - `...

    spring-data-jpa-postgresql:弹簧数据jpa-postgresql

    Hibernate,Kotlin没有可空ID属性 ... @SequenceGenerator(name = " SEQ_GROUP " , sequenceName = " SEQ_GROUP " , allocationSize = 1 ) @Column(name = " GROUP_KEY " , unique = true , nullable = false

    hibernate注解说明文档

    @SequenceGenerator(name = "user_seq", sequenceName = "user_sequence", initialValue = 1, allocationSize = 1) public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = ...

    Hibernate注解大全

    @SequenceGenerator(name = "userSeq", sequenceName = "user_sequence", initialValue = 1, allocationSize = 1) public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = ...

    ExtJS实现多文件上传UploadDialog For ExtJS3.x

    @SequenceGenerator(name="hssea_demo_seq", sequenceName="seq_hssea_demo", allocationSize=1) private long id; @Column(name="CODE") private String code; @Column(name="DESCRIPTION") private ...

    spring security3.0帮助文档

    @SequenceGenerator(name = "user_seq", sequenceName = "USER_SEQ", allocationSize = 1) private Long id; private String name; private String password; private boolean disabled; @ManyToMany...

Global site tag (gtag.js) - Google Analytics