【问题标题】:Hibernate unique constraint exception catchHibernate 唯一约束异常捕获
【发布时间】:2017-12-13 11:56:43
【问题描述】:

我在某些字段中有一个带有唯一约束的简单注册,我想在.jsp 页面中处理带有友好消息的唯一异常,但我不知道我应该在 catch 块中涉及哪个异常。当我尝试使用重复字段注册用户时,我进入控制台:

Dec 13, 2017 12:35:10 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper 
logExceptions
WARN: SQL Error: 1062, SQLState: 23000
Dec 13, 2017 12:35:10 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper 
logExceptions
ERROR: Duplicate entry 'admin1' for key 'username'
Dec 13, 2017 12:43:37 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper 
logExceptions


WARN: SQL Error: 1062, SQLState: 23000
Dec 13, 2017 12:43:37 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper 
logExceptions
ERROR: Duplicate entry 'edek' for key 'PRIMARY'

处理:

try 
{
   userService.registerUser(userAccount);
}
catch(?)
{
   // something like : 
   return new ModelAndView("register","uniqueErrorMessage",message); 
}

【问题讨论】:

  • 你尝试捕捉Exception本身吗?
  • 嗯,好的,它有效,但我想区分哪个字段打破了唯一约束以显示清晰的信息。如果发生任何其他与唯一约束无关的 sql 异常,这将产生误导。

标签: hibernate jsp spring-mvc exception unique-constraint


【解决方案1】:

如果表中只有一个主键,则在异常块中,您可以在异常消息中搜索错误代码1062(插入重复行时抛出1062代码)并返回用户已经存在的相关消息..等。

您可以在插入之前执行select count(*)...where username='user entered this',如果您看到结果计数 >= 1,则返回相关消息,而不是处理 插入时出现异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多