我试图在表中插入一些值,然后应用程序并获得问题ORA-00001:违反了唯一约束。我看到序列与表的最高id不同步,但即使修复了序列号,错误仍然存在。我怎样才能调试这个错误更多,oracle日志给予更多的错误?如何查看Oracle日志?谢谢Priyank
update:我们使用审计日志插件,在User的域类中,我们捕获保存事件并将条目记录到审计日志中
在User类中,我们可以:
class User {
//some attributes, constraints, mappings
def onSave = {
Graaudit aInstance = new Graaudit();
aInstance.eventType= "GRA User Create"
aInstance.eventDescription = "GRA User Created"
aInstance.objectid = username
aInstance.objecttype = 'GRAUSER'
aInstance.user_id = RequestContextHolder.currentRequestAttributes().session.username
aInstance.withTransaction{
aInstance.save()
}
}
}
当我们在onSave事件中没有上面的代码时,用户就成功创建了。
我假设它与我们在示例上使用的休眠事务有关,它正在死亡或当前事务由于保存而死亡。
如果我们不使用事务,我们会得到一个异常"org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here"
不知道如何解决这个问题。谢谢
7条答案
按热度按时间3lxsmp7m1#
错误消息将包括被违反的约束的名称(表上可能有多个唯一约束)。可以使用该约束名称标识声明唯一约束的列
一旦知道哪些列受到影响,就可以将尝试
INSERT
或UPDATE
的数据与表中已有的数据进行比较,以确定违反约束的原因。hjqgdpho2#
由于违反了唯一约束,因此发生此ORA错误。
这是由于尝试执行
INSERT
或UPDATE
语句时,在受唯一索引限制的字段中创建了重复值。您可以通过以下方式解决此问题
1rhkuytd3#
Oracle的错误消息应该更长一些。它通常看起来像这样:
括号中的名称是约束名称。它会告诉您违反了哪个约束。
laawzig24#
错误消息如下所示
ORA-00001发生在:“查询试图在表中插入“重复”行”。它使唯一约束失败,因此查询失败,行未添加到表中。
解决方案:
查找unique_constraint中使用的所有列,例如列a、列B、列c、列d共同创建unique_constraint,然后使用以下查询从源数据中查找重复的记录:
然后使用Justin Cave的查询(粘贴在下面)查找unique_constraint中使用的所有列:
**您可以从源数据中删除重复的记录(在我的特定情况下,这是一个选择查询,正如我在“插入到选择”中所经历的那样),或者修改以使其唯一或更改约束。
kokeuurv5#
检查数据库中可能导致该特定表出现问题的序列。我改变了导致错误的表的序列,它工作了。
fzwojiic6#
我有同样的问题,当我试图插入数据合并,更新,插入。
我修复了这个问题使用修剪比较。
无法工作的代码:
成功的替代方案:
uqcuzwp87#
选择索引,然后选择所需的,然后选择SQL,然后单击操作,然后单击重建