Java 以编程方式抛出EntityExistsException-错误的做法?
我使用的是Java 以编程方式抛出EntityExistsException-错误的做法?,java,jpa,exception,Java,Jpa,Exception,我使用的是JPA,当有人试图修改现有实体时,我想抛出一个异常。我可以抛出 javax、持久性.EntyIsIsAsExabor < />代码吗?或者我应该考虑创建自己的异常类型吗?什么被认为是最佳实践?鉴于此,明确指出 当EntityManager.persist(对象) 已调用,并且实体已存在 我要说的是,把它放在任何其他情况下都是滥用 至于是否创建自己的异常类型,这是基于意见的。我很少发现这样做有任何价值,除非我需要捕捉一些非常具体的东西。似乎您想要做的是乐观锁定,以防止并发事务更新单个记
JPA
,当有人试图修改现有实体时,我想抛出一个异常。我可以抛出<代码> javax、持久性.EntyIsIsAsExabor < />代码吗?或者我应该考虑创建自己的异常类型吗?什么被认为是最佳实践?鉴于此,明确指出
当EntityManager.persist(对象)
已调用,并且实体已存在
我要说的是,把它放在任何其他情况下都是滥用
至于是否创建自己的异常类型,这是基于意见的。我很少发现这样做有任何价值,除非我需要捕捉一些非常具体的东西。似乎您想要做的是乐观锁定,以防止并发事务更新单个记录
JPA的方法是在该表中添加一个
@Version
列,然后JPA将在您检索该记录后检测是否有其他事务更新该记录。如果是,它将抛出OptimisticLockException
。您需要做的是捕获此异常并确定如何处理它。例如,您可以将这种情况报告给用户,让他们决定该做什么。文档内容为“在调用EntityManager.persist(Object)且实体已存在时,由持久性提供程序引发。”。我会认为,当你正在修改一些存在的怪异的东西时,它会被抛出,因为它不符合对异常的描述。我认为使用描述符合所发生错误的异常是最佳实践。当参数非法时,抛出一个IllegalArgumentException
。当有人访问数据中的未初始化字段时,不要抛出ArrayIndexOutOfBoundsException
,因此建议抛出RuntimeException?如果不需要捕获它,则可以使用带有适当消息的RuntimeException
。您可以使用一种更合适的未经检查的异常类型,但是RuntimeException
I创建restapi时,两者都没有错。我有两个端点:用于创建新用户的POST和用于更新现有用户的PUT。我使用Spring数据,所以在这两种情况下我都调用userRepository.save()方法。我唯一想做的就是禁用通过POST端点更新用户的可能性。