ibatis生成oracle 主键报序列不存在

storyjava 2009-04-21 02:59:15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Contact">
<insert id="insert" parameterClass="com.bonc.POJO.Contact">
<selectKey resultClass="int" keyProperty="id" type="pre">
<![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS id FROM DUAL]]>
</selectKey>
insert into contact (firstName,lastName,email) values
(#firstName#, #lastName#, #email#)
</insert>
<!--- Showing all data of table -->
<select id="getAll" resultClass="com.bonc.POJO.Contact">
select * from contact
</select>
</sqlMap>
xml文件

<selectKey resultClass="int" keyProperty="id" type="pre">
<![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS id FROM DUAL]]>
</selectKey>
去了这句话
插入语句改成
insert into contact (id,firstName,lastName,email) values
(#id#,#firstName#, #lastName#, #email#)
则没有问题
初学ibatis
请高人指点
...全文
647 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gahaya 2009-04-23
  • 打赏
  • 举报
回复
<selectKey resultClass="Integer" keyProperty="xxxId">
SELECT SEQ_XXX.CURRVAL AS xxxId from dual
</selectKey>
pre 插入前生成
post插入后生成
首先确保你已经建立了序列
fosjos 2009-04-23
  • 打赏
  • 举报
回复
type="pre"是什么类型?

楼主有没有测试过
<select ...>
<![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS id FROM DUAL]]>
</select>
storyjava 2009-04-22
  • 打赏
  • 举报
回复
如果那个序列真的不存在 我就不再这发帖了,
请高手指点
fosjos 2009-04-21
  • 打赏
  • 举报
回复
不是很明显吗,序列不存在
storyjava 2009-04-21
  • 打赏
  • 举报
回复
错误
insert
Exception in thread "main" com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in Contact.xml.
--- The error occurred while applying a parameter map.
--- Check the Contact.insert-SelectKey-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.sql.SQLException: ORA-02289: 序列不存在

at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:185)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForObject(GeneralStatement.java:104)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.executeSelectKey(SqlMapExecutorDelegate.java:472)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:442)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:82)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.insert(SqlMapClientImpl.java:59)
at com.bonc.POJO.IbatisExample.main(IbatisExample.java:19)
Caused by: java.sql.SQLException: ORA-02289: 序列不存在

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:799)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1133)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:186)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
... 6 more

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧