当前位置: 首页 > 知识库问答 >
问题:

米巴蒂斯不回滚序列

白和泽
2023-03-14

我有一个问题,创建测试使用Spring Boot我的巴蒂斯Spring Boot我已经为我的地图创建了一对夫妇。对于插入,我使用< code>@SelectKey注释来获取序列的下一个值。当Spring回滚时,事务不会回滚序列,而是在每次应用程序启动时递增序列。

铁。

@RunWith(SpringRunner.class)
@ActiveProfiles(profiles = "local")
@SpringBootTest
@Slf4j
@Transactional
public class MultimediaMapperTest {

    @Autowired
    private MultimediaMapper multimediaMapper;

    @Autowired
    private IEmpresasService empresasService;



    @Test
    public void insertArchivo() {
        Multimedia archivo = Multimedia.builder()
                .tiposEntidad(TiposEntidad.EMP)
                .idEntidad(1)
                .awsKey("KEY_AMAZON_WEB_SERVICES")
                .nomFichero("fichero.txt")
                .mime("application/pdf")
                .observaciones("prueba observaciones")
                .build();

        multimediaMapper.insertArchivos(archivo);
        log.debug("Fin de la inserción de {}", archivo);
        assertThat(archivo.getIdArchivo(), is(notNullValue()));

    }

日志:

第一次开始:


[INFO ] 2018-04-23 21:44:16,369 [] o.s.c.s.DefaultLifecycleProcessor - Starting beans in phase 2147483647
[INFO ] 2018-04-23 21:44:16,369 [] s.d.s.w.p.DocumentationPluginsBootstrapper - Context refreshed
[INFO ] 2018-04-23 21:44:16,396 [] s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
[INFO ] 2018-04-23 21:44:16,470 [] s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
[INFO ] 2018-04-23 21:44:16,880 [] e.g.m.a.d.MultimediaMapperTest - Started MultimediaMapperTest in 7.035 seconds (JVM running for 8.255)
[INFO ] 2018-04-23 21:44:18,600 [] o.s.t.c.t.TransactionContext - Began transaction (1) for test context [DefaultTestContext@40d10264 testClass = MultimediaMapperTest, testInstance = es.gogroup.module.archivos.dao.MultimediaMapperTest@6edd4fe2, testMethod = insertArchivo@MultimediaMapperTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@2773504f testClass = MultimediaMapperTest, locations = '{}', classes = '{class es.gogroup.PanchoApplication}', contextInitializerClasses = '[]', activeProfiles = '{local}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.SpringBootTestContextCustomizer@2a798d51, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@37afeb11, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@245b4bdc, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@1b7cc17c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]; transaction manager [org.springframework.jdbc.datasource.DataSourceTransactionManager@cfb94fd]; rollback [true]
[DEBUG] 2018-04-23 21:44:18,662 [] e.g.m.m.d.M.insertArchivos!selectKey - ==>  Preparing: SELECT pg_catalog.nextval('"SEQ_MULTIMEDIA"'); 
[DEBUG] 2018-04-23 21:44:18,689 [] e.g.m.m.d.M.insertArchivos!selectKey - ==> Parameters: 
[DEBUG] 2018-04-23 21:44:18,759 [] e.g.m.m.d.M.insertArchivos!selectKey -   Preparing: INSERT INTO MULTIMEDIA(ID_ARCHIVO,TIPO_ENTIDAD, ID_ENTIDAD,AWS_KEY, NOM_FICHERO, OBSERVACIONES, MIME) VALUES (?,?,?,?, ?, ?, ?) 
[DEBUG] 2018-04-23 21:44:18,767 [] e.g.m.m.d.M.insertArchivos - ==> Parameters: 15(Integer), EMP(String), 1(Integer), KEY_AMAZON_WEB_SERVICES(String), fichero.txt(String), prueba observaciones(String), application/pdf(String)
[DEBUG] 2018-04-23 21:44:18,803 [] e.g.m.m.d.M.insertArchivos - 

下次开始:


[INFO ] 2018-04-23 21:58:15,778 [] o.s.t.c.t.TransactionContext - Began transaction (1) for test context [DefaultTestContext@40d10264 testClass = MultimediaMapperTest, testInstance = es.gogroup.module.archivos.dao.MultimediaMapperTest@6edd4fe2, testMethod = insertArchivo@MultimediaMapperTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@2773504f testClass = MultimediaMapperTest, locations = '{}', classes = '{class es.gogroup.PanchoApplication}', contextInitializerClasses = '[]', activeProfiles = '{local}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.SpringBootTestContextCustomizer@2a798d51, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@37afeb11, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@245b4bdc, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@1b7cc17c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]; transaction manager [org.springframework.jdbc.datasource.DataSourceTransactionManager@cfb94fd]; rollback [true]
[DEBUG] 2018-04-23 21:58:15,856 [] e.g.m.m.d.M.insertArchivos!selectKey - ==>  Preparing: SELECT pg_catalog.nextval('"SEQ_MULTIMEDIA"'); 
[DEBUG] 2018-04-23 21:58:15,888 [] e.g.m.m.d.M.insertArchivos!selectKey - ==> Parameters: 
[DEBUG] 2018-04-23 21:58:15,954 [] e.g.m.m.d.M.insertArchivos!selectKey -   Preparing: INSERT INTO MULTIMEDIA(ID_ARCHIVO,TIPO_ENTIDAD, ID_ENTIDAD,AWS_KEY, NOM_FICHERO, OBSERVACIONES, MIME) VALUES (?,?,?,?, ?, ?, ?) 
[DEBUG] 2018-04-23 21:58:15,964 [] e.g.m.m.d.M.insertArchivos - ==> Parameters: 16(Integer), EMP(String), 1(Integer), KEY_AMAZON_WEB_SERVICES(String), fichero.txt(String), prueba observaciones(String), application/pdf(String)
[DEBUG] 2018-04-23 21:58:16,001 [] e.g.m.m.d.M.insertArchivos - 

共有1个答案

鲁鹏
2023-03-14

无法回滚数据库序列。这是一个功能,而不是一个bug。:)

PostgreSQL:

重要提示:为避免阻塞从同一序列获取数字的并发事务,nextval 操作永远不会回滚;也就是说,一旦一个值被获取,它就被认为是被使用的,即使后来执行下一个值的事务中止了。这意味着中止的事务可能会在分配值的顺序中留下未使用的“漏洞”。

甲骨文:

生成序列号后,序列号仅对生成该序列号的会话可用。独立于事务提交或回滚,其他用户引用order_seq。NEXTVAL获取唯一值。如果两个用户同时访问同一序列,那么每个用户收到的序列号可能会有间隙,因为序列号也是由另一个用户生成的。

SQL Server:

序列号是在当前事务的范围之外生成的。无论使用序列号的事务是提交还是回滚,它们都会被消耗。

 类似资料:
  • 我无法使用xml文件将查询结果映射到带有MyBatis和Spring Boot的bean。 配置:Spring启动,mybatis。 1) 我有一个制图器: 2)在同一个包中,我有用于ResultSet的xml: 3) DTO: 3) 申请。属性: 4)应用程序: 请帮忙!

  • case-0-3.sql: 我在进行任何更改之前标记数据库: 之后,我在每个文件应用后应用文件和标记数据库: 求求你,救命。可能有人在sql或其他格式中使用回滚操作?哪里错了?我做错了什么?它是工作液基功能吗?

  • 问题内容: 我叫两种方法,第一种方法更新一个表,第二种方法在另一个表中插入一条记录。当第二笔交易失败时,它不会回退第一笔交易。 这是我的支持豆: EJB接口: EJB类: 我的自定义例外: 编辑: 添加了DAO类: 和DAO接口: 问题答案: 在这种情况下,关键问题是某些JBoss版本中数据源中的默认错误。原始代码很好,并且可以在其他应用程序服务器(WebSphere App Server和轻量级

  • 我正在用Cassandra开始一个新项目(并计划使用最新的稳定版(1.2.x))。我尝试过几种不同的Java库,如Hector、Astyanax、Cassandra jdbc。。。 其中,(简而言之)我的选择是阿斯蒂亚纳克斯。但后来我也发现并尝试了数据堆栈的Java驱动程序,它支持新的CQL二进制协议,如果你只使用CQL,它要干净得多。而且1.0.0 GA版本似乎很快就会发布。 你会推荐哪一个?谢

  • 我在web服务中使用Prometheus Java simpleclient来跟踪有多少事件导致了这种或那种状态。 我可以在日志中检查计数器是否正在被调用,是否在内部递增,但是似乎很多时候数据都没有到达/metricsendpoint。 例如,就在刚才,在每隔几分钟为同一状态递增计数器3次之后,日志将打印出“当前值= 0,新值= 1”三次。前两次在/metricsendpoint上没有显示任何数据

  • 问题内容: 我正在使用MySQL的AUTO_INCREMENT字段和InnoDB支持事务。我回滚事务时注意到,AUTO_INCREMENT字段未回滚吗?我发现它是按这种方式设计的,但是有没有解决方法? 问题答案: 让我指出一些非常重要的事情: 您永远不要依赖自动生成键的数字功能。 也就是说,除了将它们的相等性(=)或不相等性(<>)进行比较之外,您不应做任何其他事情。没有关系运算符(<,>),没有