春季启动-PostgreSQL事务

时间:2019-01-13 11:48:29

标签: spring postgresql transactions

我有以下设置: -Spring Boot应用程序发出发布请求,以使用休眠将对象插入到Postgresql表TableA中; -某些postgresql表具有一个触发器,该触发器在某些条件下会触发一个对TableB进行插入的函数; -TableB有2个触发器:第一个触发器在将TableB插入后使用监听/通知功能在websocket上发送通知,而第二个触发器则使用插入到TableC的功能

问题:如果客户端在TableA中成功执行了第一个插入操作,他将收到200个Code,但是在路上可能还会有2个插入操作。 如果在以下任一插入过程中出现问题,则客户端会看到200 Code,但错过了重要数据。 我的逻辑说这必须包装成全有或全无的交易式实体,但是我该怎么做呢?

亲切的问候

EDIT1:我刚刚进行了测试,我用@Transactional注释了第一个发布请求方法,并在随后的插入过程中,如果遇到任何错误并且未执行任何插入操作,则将向客户端返回500个错误代码。很抱歉浪费您的时间。

1 个答案:

答案 0 :(得分:0)

使用@Transactional 对第一个请求方法进行注解并控制所有可能的错误,即使使用 try 和 catch 块也是如此。

你还应该定义你的代码要返回哪些错误,不是所有的错误都是由服务器引起的,当你应该返回 5XX 错误时,还有客户端(例如发送错误或意外的参数)和您可能应该返回 4XX 代码。