java.sql.BatchUpdateException:ORA-00001:违反了唯一约束(DBSCHEMA.IDX_CO_DETAILS).
我已经检查了表中索引名称DBSCHEMA.IDX_CO_DETAILS的索引.
它不包含任何列(INCLUDE_ColUMN为null).我怎么知道这个约束是什么?它是主键约束吗?
我们正在使用hibernate进行ORM.下面是hibernate上下文中的后向跟踪
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at org.hibernate.exception.sqlStateConverter.convert(sqlStateConverter.java:94) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)解决方法 A unique constraint强制执行唯一性.与 primary key constraint不同,它将允许空值.
您的错误意味着当数据库配置为明确禁止时,您正在插入重复数据.
您可以通过在all_constraints上运行以下查询来找出表上的约束.该链接解码CONSTRAINT_TYPE列,例如P是主键,U是唯一键.
select * from all_constraints uc where uc.table_name = 'MY_table' and owner = 'DBSCHEMA'
要找出约束中的列,请使用all_cons_columns
,或将两者合并为一个查询:
select uc.*,ucc.column_name,ucc.position from all_constraints uc join all_cons_columns ucc on uc.owner = ucc.owner and uc.table_name = ucc.table_name and uc.constraint_name = ucc.constraint_name where uc.table_name = 'MY_table' and uc.owner = 'DBSCHEMA'
要查询,您可以添加附加条件和constraint_name =’IDX_CO_DETAILS’,以查找似乎导致您的问题的特定约束的详细信息.
由于几个原因,您的评论有点令人惊讶.即使是系统创建的约束,例如,在创建表而没有指定名称时在线定义的约束也应该出现.此外,约束名称IDX …意味着它是一个索引.
如果您运行以下查询,它应该告诉您数据库中是否存在该对象:
select * from all_objects where object_name = 'IDX_CO_DETAILS'
我希望这个查询返回的OBJECT_TYPE是’INDEX’.
接下来,以下查询将返回具有该名称的每个索引,索引的类型,与其关联的表以及该表的所有者.
select * from all_indexes where index_name = 'IDX_CO_DETAILS'
根据您的错误判断,我还希望此查询返回的UNIQUnesS列是’UNIQUE’.
这应该可以帮助您追踪对象.
您还可以使用系统包dbms_metadata
来跟踪对象的DDL;小心它会返回一个clob.
select dbms_Metadata.get_ddl('INDEX','IDX_CO_DETAILS',schema => 'DBSCHEMA') from dual
参数模式是可选的.
总结以上是内存溢出为你收集整理的oracle – 约束违例异常ORA-00001全部内容,希望文章能够帮你解决oracle – 约束违例异常ORA-00001所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)