我正在使用JPA
,我想在有人试图修改现有实体时抛出异常。我可以抛出javax.persistence.EntityExistsException
还是应该考虑创建自己的异常类型?什么是最佳做法?
答案 0 :(得分:1)
鉴于the JavaDoc明确表示
EntityManager.persist(Object)
时由持久性提供程序抛出 被调用,实体已经存在
我会说在任何其他情况下抛弃它都是滥用。
关于是否创建自己的例外类型,这是基于意见的。除非我需要捕捉非常具体的东西,否则我很少发现这样做的任何价值。
答案 1 :(得分:0)
您希望做的是乐观锁定,以防止并发事务更新单个记录。
JPA的做法是在该表中添加@Version
列,然后JPA将检测是否有其他事务在您检索后更新相同的记录。如果是,它将抛出OptimisticLockException
。您需要做的是捕获此异常并确定如何处理它。例如,您可以向用户报告此情况,并让他们确定要执行的操作。