apache/gravitino
View on GitHub[Improvement] Fix missing MyBatis @Param for role soft-delete mapper binding
Open
#10,270 opened on Mar 6, 2026
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());
}