月光下的蜗牛 2022-05-08 19:10
浏览 33
已结题

quarkus 事务失效

pom 文件如下

 <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-narayana-jta</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-mongodb-client</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-mongodb-panache</artifactId>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.22</version>
    </dependency>

代码如下


 public  String  testAffairTemp(String name) throws Exception{

            Student studentByName = new Student().getStudentByName(name);
        try{
            transaction.begin();
            studentByName.setName("年糕");
            studentByName.persistOrUpdate();
            studentByName.update();
            Student student = new Student();
            student.setName("美猴王");
            student.setAge(27);
            student.setPhone("123123123");
            student.setId(new ObjectId("62779c8c364eef2a0479f57b"));
            student.persist();
            transaction.commit();
        }
        catch (RuntimeException  e){
            transaction.rollback();
            System.out.println("yunxing");
            e.printStackTrace();
        }
        catch (Exception e){
            System.out.println("抓到不会滚异常");
            e.printStackTrace();
        }

        return studentByName.toString();
    }

其中 student.setId(new ObjectId("62779c8c364eef2a0479f57b")); 这句话我故意制造runtimeexception 但是异常时抓到了但是并没有回滚
附官网代码如下:

@ApplicationScoped
public class SantaClausService {

@Inject ChildDAO childDAO
@Inject SantaClausDAO santaDAO
@Inject UserTransaction transaction

public void getAGiftFromSanta(Child child, String giftDescription) throws Exception {
    // some transaction work
    try {
        transaction.begin();
        Gift gift = childDAO.addToGiftList(child, giftDescription);
        santaDAO.addToSantaTodoList(gift);
        transaction.commit();
    }
    catch(SomeException e) {
        // do something on Tx failure
        transaction.rollback();
    }
}

}

不理解为什么事务会失效,是因为我用了uni去接纳数据的原因吧 ,有可能是uni是异步非阻塞的所以可能不是同一个事务了,求解答

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月16日
    • 创建了问题 5月8日

    悬赏问题

    • ¥15 在虚拟机中安装flash code
    • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
    • ¥20 verilog状态机方法流水灯
    • ¥15 pandas代码实现不了意图
    • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
    • ¥25 LT码在高斯信道下的误码率仿真
    • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
    • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
    • ¥15 电视版的优酷可以设置电影连续播放吗?
    • ¥50 复现论文;matlab代码编写