先声明一下我用的框架是Spring + Hibernate + SpringMVC 数据库使用的是Oracle
昨天遇到了一个特诡异的问题就是我使用Oracle序列,把主键的计数交给Hibernate处理,
@
Entity
@Table(name = "BIO_STUDY")
public class Study implements Serializable{
private static final long serialVersionUID = -5932941248053882057L;
private int id;
private Project project;
private String name;
private String description;
private Set<Experiment> experiments;
@Id
@Column(name = "ID")
@SequenceGenerator(name = "BIO_STUDY_SQ",
sequenceName = "BIO_STUDY_SQ" )
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BIO_STUDY_SQ")
public int getId() {
return id;
}
写完部署什么都没问题,可当我写了测试类进行测试时发现主键的初始值竟然是50,其步长亦是50,在同事的帮助下发现原来是Hibernate在做鬼,@SequenceGenerator中添加两个参数(allocationSize = 1, initialValue = 1)就OK。通过查找Hibernate的资料发现原来是因为allocationSize的默认值是50.具体请参考http://www.oracle.com/technology/global/cn/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#SequenceGenerator
分享到:
相关推荐
Hibernate中主键生成策略,开发的时候经常会用到的我都整理到这里了~
关于Hibernate的各种主键生成策略与配置详解
hibernate 无主键表映射资源说明: 1. 简单Demo 2. Demo对应的sql语句 3. 对应博客文档
在hibernate中实现oracle的自动增长
hibernate中用到联合主键的看看就会了很棒的资料
hibernate复合主键设置,里面很全面的配置,可以拿到直接用
hibernate的主键生成策略介绍,详细介绍了有关hibernate的常用主键生成策略,希望对一些正在学习hibernate的同学有一定的帮助
Hibernate联合主键,MyEclipse的例子
复合主键映射 <br>通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用标签进行映射,其它属性采用正常映射
hibernate复合主键的实例,hibernate复合主键的实例。
Hibernate各种主键生成策略详解,包括 assigned increment hilo seqhilo sequence identity native uuid foreign uuid.hex sequence-identity 等
Hibernate各种主键生成策略与配置详解 1、assigned 主键由外部程序负责生成,在 save() 之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无关,可以跨数据库。在存储对象前,必须要使用...
hibernate中自动生成主键的办法
NULL 博文链接:https://liuna718-163-com.iteye.com/blog/748089
1主键常用的生成策略 2对数据库的依赖性总结 3关于主键生成策略的选择 详细解释
Hibernate主键生成方式 1.identity方式 2.increment方式 3.assigned方式 4.sequence方式 5.native方式 6.UUID方式
请更名为 Hibernate复合主键.part2.rar
“increment” 主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。
Hibernate主键生成策略.doc ··········