apache/gravitino

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

Open

#10,270 opened on Mar 6, 2026

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

Repository metrics

Stars
 (3,058 stars)
PR merge metrics
 (PR metrics pending)

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());
  }

Contributor guide