oracle jpa 自增长,转载:使用JPA生成实体类后,主键每次插入,数量按50递增,数据库:oracle,主键递增......

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都不能相信了,还能相信谁啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值