3

在使用 spring 和 hibernate 开发 web 应用程序时,我得到了以下 execption。

java.sql.SQLException: ORA-02289: 序列不存在

当我试图将数据插入到表中时,我正在使用序列来增加 request_id 的值。

我正在使用以下编码进行插入

    @Override
public void postRequest(RequestInfo requestInfo) 
{
Session session = null;
Transaction trans = null;
SessionFactory sessionFactory = null;

sessionFactory=HibernateConfig.getSessionFactory();
session= sessionFactory.openSession();
trans = session.beginTransaction();
session.save(requestInfo);
trans.commit();
session.close();

}
public class HibernateConfig 
{
public static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() 
{
sessionFactory = new Configuration().configure().buildSessionFactory();
return sessionFactory;
}
}

在休眠映射中,我提到过这样

<id name="requestId" type="int" column="request_id" >
<generator class="sequence">
<param name="sequence">REQUEST_INFO_SEQ</param>
</generator>
</id>

我也尝试使用 native,但我无法插入要插入的值。

我正在使用 oracle 11g。

任何人都可以给我解决这个问题。

4

3 回答 3

5

在 hbm.xml 文件中使用模式名称(如schemaName.sequenceName )给出序列名称后,插入操作工作正常。谢谢大家回复提问。

于 2012-11-12T06:50:54.647 回答
2

序列是否存在?要检查,请执行以下操作:

select * from all_sequences where sequence_name = 'REQUEST_INFO_SEQ'
于 2012-11-08T05:24:53.190 回答
0

我认为传入参数的 POJO 对象有问题,您应该首先创建会话做 3 件事,使 POJO 对象(瞬态状态)然后调用持久方法保存、更新、删除(持久状态)和 trx.commit(分离休眠对象的状态)。并且应该在 try catch 块中完成这项工作并捕获 HibernateException 然后调用 finally 它将关闭会话,并使用 buildSessionFactory();

sessionFactory = new Configuration().configure().buildSessionFactory();

于 2012-11-08T05:46:25.700 回答