Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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 使用触发器在mysql行中进行并发更新_Java_Mysql_Web Services_Concurrency - Fatal编程技术网

Java 使用触发器在mysql行中进行并发更新

Java 使用触发器在mysql行中进行并发更新,java,mysql,web-services,concurrency,Java,Mysql,Web Services,Concurrency,我有一个使用Java+Mysql的基于soap的web服务 web服务包括保存和发送为响应生成的文档。每个用户的可用文档数量有限。该服务向外部系统提供文档,因此,我必须随时了解特定用户可用的文档 为了改进这一点,需要构建一个触发器,在创建新文档时更新用户行 CREATE TRIGGER `Service`.`discount_doc_fromplan` AFTER INSERT ON `Service`.`Doc` FOR EACH ROW UPDATE `Service`.`User` SET

我有一个使用Java+Mysql的基于soap的web服务

web服务包括保存和发送为响应生成的文档。每个用户的可用文档数量有限。该服务向外部系统提供文档,因此,我必须随时了解特定用户可用的文档

为了改进这一点,需要构建一个触发器,在创建新文档时更新用户行

CREATE TRIGGER `Service`.`discount_doc_fromplan`
AFTER INSERT ON `Service`.`Doc` FOR EACH ROW
UPDATE `Service`.`User` SET User.DocAvailable = User.DocAvailable - 1 where User.id = NEW.idUser
当用户由于系统原因试图同时创建两个或多个文档时,就会出现问题。这给了我一个“尝试获取锁时发现的死锁”


有人想在不出现死锁问题的情况下,同时提供适当数量的可用文档来改进此功能?。这是我的第一个web服务。谢谢。

您正试图在数据库触发器中实现您的业务逻辑。您可以在(1)web服务应用程序中间件或(2)存储过程中实现此逻辑,而不是触发器。不过,我更喜欢方法(1)。其中的基本代码将由用户在累积计数器中收集
Doc
表中的所有插入,并在所有插入结束时,一次性更新
user
DocAvailable=DocAvailable-counter
。您可以在事务中执行此操作,以便在出现问题时回滚。在开始交易之前,您必须阅读
用户可用的
文档配额