Skip to content

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

@justinmclean

Description

@justinmclean

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions