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都不能相信了,还能相信谁啊!
分享到:
相关推荐
@SequenceGenerator(name = "mySeq", sequenceName = "MY_SEQ", initialValue = 1, allocationSize = 1) private Integer id; ``` - **属性说明**: - `sequenceName`: 序列的名称。 - `initialValue`: 序列...
@SequenceGenerator(name="repair_seq",sequenceName="seq_repair",allocationSize=1):此注解用于定义一个序列生成器,其中name是序列生成器的名称,sequenceName是数据库中序列的名称,allocationSize定义了每次...
table = "SEQUENCE_TABLE", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", initialValue = 100, allocationSize = 50 ) @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "EMP...
JPA注解@GeneratedValue的使用方法 ...JPA的@GeneratedValue注解可以指定主键的生成策略,包括TABLE、SEQUENCE、IDENTITY、AUTO四种标准策略。 Hibernate也提供了多种主键生成策略,用于满足不同的应用场景。
- `allocationSize`:每次递增的大小。 - `strategy`:生成策略,包括`AUTO`(由框架决定)、`IDENTITY`(依赖于数据库的自动增长机制)、`SEQUENCE`(基于数据库的序列)和`TABLE`(基于单独的表)。 - `...
Hibernate,Kotlin没有可空ID属性 ... @SequenceGenerator(name = " SEQ_GROUP " , sequenceName = " SEQ_GROUP " , allocationSize = 1 ) @Column(name = " GROUP_KEY " , unique = true , nullable = false
@SequenceGenerator(name = "user_seq", sequenceName = "user_sequence", initialValue = 1, allocationSize = 1) public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = ...
@SequenceGenerator(name = "userSeq", sequenceName = "user_sequence", initialValue = 1, allocationSize = 1) public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = ...
@SequenceGenerator(name="hssea_demo_seq", sequenceName="seq_hssea_demo", allocationSize=1) private long id; @Column(name="CODE") private String code; @Column(name="DESCRIPTION") private ...
@SequenceGenerator(name = "user_seq", sequenceName = "USER_SEQ", allocationSize = 1) private Long id; private String name; private String password; private boolean disabled; @ManyToMany...