如何解决Quarkus Panache Mongo 交易
我知道对 MongoDB 的事务支持仍处于试验阶段……但我正在尝试在我的一个项目中使用它,该项目还处于一些早期阶段。
因为我没有使用 Hibernate...我也像这样添加了 JTA 依赖项:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-mongodb-panache</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-narayana-jta</artifactId>
</dependency>
我正在使用 @Transactional 注释,就像:
@POST
@Transactional
public Response addServicePlace(@RequestBody(description = "Adds a new record",required = true,content = @Content(mediaType = APPLICATION_JSON,schema = @Schema(implementation = ServicePlaces.class))) @Valid ServicePlaces services,@Context UriInfo uriInfo) {
Service s = new Service();
s.typeId = services.type;
s.title = services.title;
s.persist();
services.descriptions.stream().forEach(c -> {
ServiceDescription serviceDescription = new ServiceDescription();
serviceDescription.lang = c.lang;
serviceDescription.description = c.description;
serviceDescription.serviceId = s.id;
serviceDescription.persist();
});
throw new RuntimeException("BANG!"); ....
但是事务没有回滚。
我也使用了声明式事务实现 - 相同的行为。
作为参考,我正在使用 Panache 的 Active Record 模式。
有人遇到过类似的情况吗?
解决方法
带有 Panache 的 MongoDB 尚不支持事务,请参阅 https://quarkus.io/guides/mongodb-panache#transactions。
Quarkus 2.0 将提供交易支持(应该会在 6 月推出),有了它,您将能够在方法上使用 @Transactional
来标记您的交易边界,不需要额外的库.
注意 MongoDB 事务仅从 MongoDB 4.0 版开始可用,并且需要一个副本集才能工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。