apache/gravitino

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

Open

#10 270 ouverte le 6 mars 2026

Voir sur GitHub
 (4 commentaires) (0 réactions) (1 assigné)Java (887 forks)auto 404
good first issueimprovement

Métriques du dépôt

Stars
 (3 058 stars)
Métriques de merge PR
 (Métriques PR en attente)

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

Guide contributeur