以编程方式抛出EntityExistsException - 糟糕的做法?

时间:2018-06-11 07:31:56

标签: java jpa exception

我正在使用JPA,我想在有人试图修改现有实体时抛出异常。我可以抛出javax.persistence.EntityExistsException还是应该考虑创建自己的异常类型?什么是最佳做法?

2 个答案:

答案 0 :(得分:1)

鉴于the JavaDoc明确表示

  

EntityManager.persist(Object)时由持久性提供程序抛出   被调用,实体已经存在

我会说在任何其他情况下抛弃它都是滥用。

关于是否创建自己的例外类型,这是基于意见的。除非我需要捕捉非常具体的东西,否则我很少发现这样做的任何价值。

答案 1 :(得分:0)

您希望做的是乐观锁定,以防止并发事务更新单个记录。

JPA的做法是在该表中添加@Version列,然后JPA将检测是否有其他事务在您检索后更新相同的记录。如果是,它将抛出OptimisticLockException。您需要做的是捕获此异常并确定如何处理它。例如,您可以向用户报告此情况,并让他们确定要执行的操作。