代码之家  ›  专栏  ›  技术社区  ›  NimChimpsky

在SLSB中,用EJB3和entitymanager处理ConstraintViolationException的最佳方法是什么

  •  3
  • NimChimpsky  · 技术社区  · 14 年前

    这是我的代码片段:

    @Stateless
    public class mySLSB {
    
    @PersistenceContext(unitName = "db")
    private EntityManager myEntityManager;
    
     public void crud(MyEntity myEntity) throws MyException {
      myEntityManager.merge(myEntity);
     }
    }
    

    捕获hibernate异常的最佳方法是什么?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Pascal Thivent    14 年前

    但是,此合并会导致ConstraintViolationException,它不会抛出MyException(在调用的servlet中捕获)。捕获hibernate异常的最佳方法是什么?

    javax.persistence.RollbackException ConstraintViolationException 作为原因。所以抓住 RollbackException 使用 getCause() 去检查它。

        2
  •  1
  •   kraftan    14 年前

    由于特殊原因引发了Hibernate异常。每一个原因都需要自己的处理。对于一些例外情况,如 ConstraintViolationException ,您甚至必须区分它们是由用户错误还是服务器端错误引起的。如果用户提供的输入数据无效,则必须告诉用户应更正输入。如果服务器错误地操作了数据,你必须告诉客户出了问题,但这不是他/她的错。

    不过,你能做的是抓住 HibernateException

    在您的示例代码中,我将首先搜索代码中可能导致 ConstraintViolationException异常 getConstraintName() ConstraintViolationException异常 实例。然后,应记录提取的信息并将其呈现给用户。