我有一个 spring boot 应用程序 web-socket 服务器作为 WEBRTC 信令服务器启动并运行。
该服务器必须根据从/向服务器旋转的消息,通过不同的客户端套接字将一些数据记录到数据库中。
在尝试使用超过 2 个对等方从客户端进行电话会议,并将信号作为带断点的调试器运行时,该场景成功完成,数据库按预期更新,电话会议发生。
但是,如果我在没有调试和断点的情况下运行服务器,则会出现 sql 错误
Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: HikariProxyPreparedStatement@1623454983 wrapping com.mysql.cj.jdbc.ClientPreparedStatement:
delete from my_table where my_table_id='601cbe2b-6af2-4e82-a69c-52b92d30686c'; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: HikariProxyPreparedStatement@1623454983 wrapping com.mysql.cj.jdbc.ClientPreparedStatement:
delete from my_table where my_table_id='601cbe2b-6af2-4e82-a69c-52b92d30686c'
我正在使用 Spring JPA 并在填充实体数据及其所有嵌套列表和关系实体对象后对 web-socket 接收到的每条消息调用保存函数,以保留调用流的数据。
conferenceRepository.save(conference);
我认为该错误是因为查询在数据库上以随机顺序同时运行,而数据库中仍然没有数据可以采取行动。
与调试模式一样,我需要时间从一个断点移动到另一个断点,这是为了确保数据持久性。
但我并不完全确定这个问题。
是否有一种最佳方式来应用并发数据库调用和更新,并确保数据在数据库中正确保存和持久化,以用于并发 web-socket 相关消息?