Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式抛出EntityExistsException-错误的做法?_Java_Jpa_Exception - Fatal编程技术网

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端点更新用户的可能性。