从数据库中取序列的下一个,在网上查找了好多资料终于找到了一个,
,如下:
public Integer getNextVal() {
Number n = (Number) this.getHibernateTemplate().execute(
new HibernateCallback() {
@SuppressWarnings("unchecked")
public Object doInHibernate(Session session)
throws SQLException, HibernateException {
SQLQuery query = session
.createSQLQuery("select seq_sp.nextval SEQID from dual");
query.addScalar("SEQID",
new org.hibernate.type.IntegerType());
List children = query.list();
return (Number) children.iterator().next();
}
});
return n.intValue();
}
当时很高兴,但是我要一次取出多个序列,这个问题可难倒我了。网上查了半天找到SQL语句可以修改序列的步长,alter sequence seq increment by10,就是把序列的步长设置为什10。
虽然SQL语句可以实现,但是HQL里面没有alter这个语句。这下我想破脑袋也不知道要怎么办了。偶然的在看上面的代码的时候看到了,SQLQuery这个类,想这个应该是什么SQL语句都可以执行了。就赶快动手写了一下,运行一下。竟然成功了,
public void alterSequence(int value) {
SQLQuery query = getHibernateSession().createSQLQuery("alter sequence seq_sp increment by "+value);
query.executeUpdate();
}
tbStorageOldProductDao.alterSequence(value);
Integer val = tbStorageOldProductDao.getNextVal();
tbStorageOldProductDao.alterSequence(1);
大功告成,记录一下,不知道有没有什么隐患。。。。。。
分享到:
相关推荐
在开发过程中,开发者可以利用各种工具,如Hibernate Tools,进行逆向工程,自动生成实体类和映射文件,其中就包含了对序列主键策略的支持。此外,数据库管理工具,如DataGrip、SQL Developer等,可以帮助直观地...
1. Hibernate对sequence生成的主键类型有限制,必须是short、long或integer,以确保与Java中的数据类型匹配。 2. 当数据库是从其他如SQL Server迁移过来时,确保sequence的初始值大于现有表中最大ID,以避免冲突。 3...
在IT领域,尤其是在数据库管理和对象关系映射(ORM)技术中,Hibernate框架因其高效、灵活以及对多种数据库的兼容性而备受青睐。本文将深入探讨如何在Hibernate中实现Oracle数据库的自动增长特性,这一功能对于确保...
虽然`<param name="sequence">CREDIT_RECORD_id</param>`在这个上下文中并不生效,但其含义是在使用特定于Oracle的sequence策略时指定序列名。实际上,在使用“native”策略时,Hibernate会根据当前数据库环境自动...
例如,在 Oracle 中,它默认会尝试使用 `hibernate_sequence` 序列。 ```xml ``` 4. **hilo**:高低位算法(Hi-Lo Algorithm),它通过组合高位和低位数字来生成 ID,从而减少对数据库的访问。你需要预先创建...
4. **Sequence方式**:`<generator class="sequence">` 这种方式主要用于支持序列的数据库,如Oracle。开发者可以定义一个序列名称,Hibernate会通过这个序列来生成主键。这种方式确保了主键的顺序性和唯一性,但不...
在Java的持久化框架Hibernate中,一对多关系是常见的实体关联类型,表示一个实体可以与多个其他实体相关联。在处理这种关系时,我们通常会使用`Set`或`List`作为关联集合的容器。本篇文章将深入探讨`Hibernate`中一...
而MyEclipse作为一款集成开发环境,提供了对Hibernate的全面支持,包括自动生成Hibernate的映射文件。这个功能使得开发者能够快速地将数据库表结构转化为Java实体类和对应的配置文件,大大提高了开发效率。 1. **...
- 可以通过`ALTER SEQUENCE`命令来修改序列的一些属性,例如改变最小值、最大值、增量等。 3. **删除序列**: - 使用`DROP SEQUENCE`命令可以彻底删除一个序列。 #### 五、应用场景 自增序列在多种场景下都非常...
Hibernate是一款强大的Java持久化框架,它为开发人员提供了一种在Java应用中管理和存储数据到关系数据库的标准方式。Hibernate简化了对象关系映射(ORM)的过程,使得开发者无需编写大量的SQL代码,就能实现数据的...
2. @Table:指定对应的数据库表名,可包含表空间、序列等属性。 3. @Id:标识实体类的主键字段,通常与@GeneratedValue结合使用来自动生成主键。 4. @GeneratedValue:定义主键生成策略,如IDENTITY、SEQUENCE、...
5. **主键生成策略(Identifier Generator)**:Hibernate 提供了多种主键生成策略,如.AUTO(自增)、SEQUENCE(序列)、UUID(全局唯一标识符)等,开发者可以根据数据库特性选择合适的策略。 6. **Session接口**...
例如,可以使用`<generator class="sequence">`定义序列生成器,或者使用`<generator class="native">`让Hibernate自动选择适合当前数据库的主键生成策略,如自动递增。 在启动Hibernate时,我们需要创建`...
以下是对Hibernate中主键生成策略的详细解释。 1. **Identity策略**: 这种策略在数据库级别生成主键,常见于MySQL和SQL Server。当一个新对象被保存时,数据库会自动为该对象分配一个唯一的ID。在Hibernate中,...
- `@GeneratedValue`:用于指定主键生成策略,例如自增(IDENTITY)、序列(SEQUENCE)等。 - `@Temporal`:对于日期时间类型,`@Temporal(TemporalType.TIMESTAMP)`等可以指定存储格式。 4. **关系映射注解** -...
- **Sequence**:利用数据库自身的序列机制来生成主键,适用于支持序列的数据库如Oracle。 #### 六、数据类型映射 Hibernate支持将Java中的各种基本数据类型以及复杂对象映射到数据库中的不同数据类型。这种映射...
此外,还需要创建或修改Hibernate配置文件,该文件通常包含以下关键部分: 1. **配置文件**:用于初始化Hibernate SessionFactory,其中包含数据库连接信息、使用的方言(Dialect)、事务管理策略等。 2. **实体类...
- 类似于`hiLo`策略,但使用数据库序列(sequence)作为高位值来源。 9. **Sequence**: - 使用序列生成标识符。 - 适用于DB2、PostgreSQL、Oracle等数据库。 10. **Sequence-Identity**: - 特殊的序列生成...