Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长
2011-08-22 13:53
639 查看
通过Hibernate注解的方式映射oracel数据库的sequence主键生成器时,出现增加数据时sequence无序增长的问题,配置如下
@SequenceGenerator(name = "SEQ_DM_SERVICE_MODEL", sequenceName = SEQ_DM_SERVICE_MODEL")
@Id
@GeneratedValue(strategy = SEQUENCE, generator = "SEQ_DM_SERVICE_MODEL")
@Column(name = "SERVICE_MODEL_ID", unique = true, nullable = false, precision = 10, scale = 0)
public Long getId() {
return this.id;
}
此时主键id的增长是按照hibernate自动处理的方式,而并非数据库中定义的sequence来处理。必须加allocationSize=1,initialValue=1这两项配置才可以解决上述问题。如下:
@SequenceGenerator(name = "generator",allocationSize=1,initialValue=1, sequenceName = "SEQ_DM_SERVICE_MODEL")
====================================================================================================================================
安装有oracle数据库,创建数据库,总是要创建一个主键ID,唯一标示各条记录,但oracle不支持自动编号,所以还得创建一个SEQUENCE(序列)语句如
create sequence bign nocycle maxvalue
9999999999 start with
1;//增加数据
insert
into
table (ID,..)
values(bign.nextval,..)
在hibernate中的映射文件可这么写
<id
name="id" type="java.lang.Long" column="ID">
<generator
class="sequence"
>
<param
name="sequence">bign</param>
</generator>
</id>
或
<id
name="id" type="java.lang.Long" column="ID">
<generator
class="increment"
>
</id>
(increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程忘同一张表中插入数据时才能使用。在集群下不要使用)
create sequence bign nocycle maxvalue 9999999999 start with 1;//增加数据
insert into table (ID,..) values(bign.nextval,..)
在hibernate中的映射文件可这么写
<id name="id" type="java.lang.Long" column="ID">
<generator class="sequence" >
<param name="sequence">bign</param>
</generator>
</id>
或
<id name="id" type="java.lang.Long" column="ID">
<generator class="increment" >
</id>
(increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程忘同一张表中插入数据时才能使用。在集群下不要使用)
create sequence bign nocycle maxvalue 9999999999 start with 1;//增加数据
insert into table (ID,..) values(bign.nextval,..)
在hibernate中的映射文件可这么写
<id name="id" type="java.lang.Long" column="ID">
<generator class="sequence" >
<param name="sequence">bign</param>
</generator>
</id>
或
<id name="id" type="java.lang.Long" column="ID">
<generator class="increment" >
</id>
(increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程忘同一张表中插入数据时才能使用。在集群下不要使用)
@SequenceGenerator(name = "SEQ_DM_SERVICE_MODEL", sequenceName = SEQ_DM_SERVICE_MODEL")
@Id
@GeneratedValue(strategy = SEQUENCE, generator = "SEQ_DM_SERVICE_MODEL")
@Column(name = "SERVICE_MODEL_ID", unique = true, nullable = false, precision = 10, scale = 0)
public Long getId() {
return this.id;
}
此时主键id的增长是按照hibernate自动处理的方式,而并非数据库中定义的sequence来处理。必须加allocationSize=1,initialValue=1这两项配置才可以解决上述问题。如下:
@SequenceGenerator(name = "generator",allocationSize=1,initialValue=1, sequenceName = "SEQ_DM_SERVICE_MODEL")
====================================================================================================================================
安装有oracle数据库,创建数据库,总是要创建一个主键ID,唯一标示各条记录,但oracle不支持自动编号,所以还得创建一个SEQUENCE(序列)语句如
create sequence bign nocycle maxvalue
9999999999 start with
1;//增加数据
insert
into
table (ID,..)
values(bign.nextval,..)
在hibernate中的映射文件可这么写
<id
name="id" type="java.lang.Long" column="ID">
<generator
class="sequence"
>
<param
name="sequence">bign</param>
</generator>
</id>
或
<id
name="id" type="java.lang.Long" column="ID">
<generator
class="increment"
>
</id>
(increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程忘同一张表中插入数据时才能使用。在集群下不要使用)
create sequence bign nocycle maxvalue 9999999999 start with 1;//增加数据
insert into table (ID,..) values(bign.nextval,..)
在hibernate中的映射文件可这么写
<id name="id" type="java.lang.Long" column="ID">
<generator class="sequence" >
<param name="sequence">bign</param>
</generator>
</id>
或
<id name="id" type="java.lang.Long" column="ID">
<generator class="increment" >
</id>
(increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程忘同一张表中插入数据时才能使用。在集群下不要使用)
create sequence bign nocycle maxvalue 9999999999 start with 1;//增加数据
insert into table (ID,..) values(bign.nextval,..)
在hibernate中的映射文件可这么写
<id name="id" type="java.lang.Long" column="ID">
<generator class="sequence" >
<param name="sequence">bign</param>
</generator>
</id>
或
<id name="id" type="java.lang.Long" column="ID">
<generator class="increment" >
</id>
(increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程忘同一张表中插入数据时才能使用。在集群下不要使用)
相关文章推荐
- Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
- Hibernate注解映射sequence时出现无序增长问题
- hibernate映射oracle自动增长ID
- hibernate映射oracle自动增长ID
- hibernate自动生成映射文件和java实体类出现的问题
- hibernate映射oracle数据表时候出现“ORA-00903: 表名无效”问题
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- Hibernate 中annotations(注解开发)的@OneToMany 一对多双向关联映射后,出现的jar包冲突问题
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- hibernate oracle ID 自动增长 1
- 大家用hibernate的时候, 使用hibernate的sequence自动增长序列, 数据库是oracle
- hibernate oracle主键自增长中sequence跳号无序的问题
- hibernate自动映射(注解向)问题add hibernate mapping annotations to pojo为灰色
- oracle主键自动增长的实现 Oracle Sequence oracle maxid自动生成--ORA-00001: 违反唯一约束条件 (NAME.SYS_C005547)产生的原因之一(select * from all_cons_columns w
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- hibernate 与oracle在id自增长sequence的思考与总结
- oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- 利用hibernate实现oracle(每张表的ID)自动增长