SpringBoot中如何将自动生成的UUID存入触发器表?
解决方案
要实现将生成的UUID存入触发器表,只需在Service实现类中同时操作两个Repository即可,具体步骤如下:
1. 注入触发器表的Repository
在GKZServiceImpl中注入GKZTriggerRepository:
@Autowired private GKZTriggerRepository triggerRepository;
2. 修改saveGKZ方法,同时保存UUID到触发器表
生成UUID后,创建GKZtrigger实例并设置UUID,调用触发器Repository的save方法完成存储。同时添加@Transactional注解,保证两个数据库操作的原子性(避免出现输入表保存成功但触发器表保存失败的不一致情况):
@Override @Transactional public GKZ saveGKZ(GKZ gkz) { // 生成随机UUID UUID uuid = UUID.randomUUID(); gkz.setuid(uuid); // 保存输入表数据 gRepository.save(gkz); // 创建触发器表实体并保存UUID GKZtrigger trigger = new GKZtrigger(); trigger.setuid(uuid); triggerRepository.save(trigger); return gkz; }
3. 补充说明
@Transactional注解会确保任意一个数据库操作失败时,另一个操作自动回滚,保障数据一致性- 确认
GKZTriggerRepository已继承Spring Data JPA的JpaRepository(或CrudRepository)接口,这样才能直接使用save方法
修改后的完整ServiceImplementation类
package de.cibplus.cibplusngvdpGKZ.Service; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import de.cibplus.cibplusngvdpGKZ.Model.GKZ; import de.cibplus.cibplusngvdpGKZ.Model.GKZtrigger; import de.cibplus.cibplusngvdpGKZ.Repository.GKZInputRepository; import de.cibplus.cibplusngvdpGKZ.Repository.GKZTriggerRepository; @Service public class GKZServiceImpl implements GKZService { @Autowired private GKZInputRepository gRepository; @Autowired private GKZTriggerRepository triggerRepository; @Override @Transactional public GKZ saveGKZ(GKZ gkz) { //Generate random UUID UUID uuid=UUID.randomUUID(); gkz.setuid(uuid); gRepository.save(gkz); // 保存UUID到触发器表 GKZtrigger gkzTrigger = new GKZtrigger(); gkzTrigger.setuid(uuid); triggerRepository.save(gkzTrigger); return gkz; } }
内容的提问来源于stack exchange,提问作者Md101
相关产品推荐
相关产品推荐

