apache/gravitino

[Improvement] Fix missing MyBatis @Param for role soft-delete mapper binding

Open

#10.270 aberto em 6 de mar. de 2026

Ver no GitHub
 (4 comments) (0 reactions) (1 assignee)Java (887 forks)auto 404
good first issueimprovement

Métricas do repositório

Stars
 (3.058 stars)
Métricas de merge de PR
 (Métricas PR pendentes)

Description

What would you like to be improved?

Role deletion on the relational backend can reach RoleMetaMapper.softDeleteRoleMetaByRoleId(Long roleId) through the REST delete-role path. The provider SQL uses #{roleId}, but this mapper method currently lacks @Param("roleId"). That mismatch can cause MyBatis named-parameter binding failures at runtime during role deletion.

How should we improve?

Add @Param("roleId") to RoleMetaMapper.softDeleteRoleMetaByRoleId (and keep provider SQL as #{roleId}), ensuring deterministic named binding across environments.

Here's a test to help:

 @Test
  public void testSoftDeleteRoleMetaByRoleIdHasNamedParam() throws NoSuchMethodException {
    Method method = RoleMetaMapper.class.getMethod("softDeleteRoleMetaByRoleId", Long.class);
    Annotation[][] parameterAnnotations = method.getParameterAnnotations();

    Assertions.assertEquals(1, parameterAnnotations.length);
    Param param = null;
    for (Annotation annotation : parameterAnnotations[0]) {
      if (annotation instanceof Param) {
        param = (Param) annotation;
        break;
      }
    }

    Assertions.assertNotNull(
        param, "Missing @Param on softDeleteRoleMetaByRoleId may break MyBatis named binding.");
    Assertions.assertEquals("roleId", param.value());
  }

Guia do colaborador