-
Notifications
You must be signed in to change notification settings - Fork 131
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Jimmer Version
0.9.94
JDK Version
jdk21
Database
mysql
OS
Windows
Expected behavior
抛出SaveException.NotUnique异常能正常翻译
package com.kongyue.ai.enterprise.jimmer;
import com.kongyue.ai.enterprise.entity.KyEnterpriseCredentialProps;
import com.kongyue.ai.enterprise.entity.KyStaffProps;
import org.babyfish.jimmer.sql.exception.SaveException;
import org.babyfish.jimmer.sql.runtime.ExceptionTranslator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.stereotype.Component;
@Component
public class NotUniqueExceptionTranslator implements ExceptionTranslator<SaveException.NotUnique> {
@Override
public @Nullable Exception translate(
@NotNull SaveException.NotUnique exception, @NotNull Args args) {
if (exception.isMatched(KyStaffProps.ENTERPRISE, KyStaffProps.PHONE)) {
return new IllegalArgumentException(
"手机号为" + exception.getValue(KyStaffProps.PHONE) + "的员工已经存在");
} else if (exception.isMatched(KyStaffProps.ENTERPRISE, KyStaffProps.ID_CARD)) {
return new IllegalArgumentException(
"身份证为" + exception.getValue(KyStaffProps.ID_CARD) + "的员工已经存在");
} else if (exception.isMatched(KyEnterpriseCredentialProps.CERTIFICATE_CODE)) {
return new IllegalArgumentException(
"资质编号" + exception.getValue(KyEnterpriseCredentialProps.CERTIFICATE_CODE) + "已经存在");
}
// 不做处理,也可以写成`return exception`
return null;
}
}
Actual behavior
未翻译,并没有进入异常翻译实现类
Description
情况描述一下,企业id作为租户id,有一个全局过滤器和拦截器。但是资质证书的编号是全局唯一的用注解@key修饰。根对象保存模式是SaveMode.NON_IDEMPOTENT_UPSERT,同一个租户下相同key执行修改操作,如果编号和另一个租户下冲突抛出异常SaveException.NotUnique,但是翻译没有捕获。
另外,能支持一下多租户下唯一性的问题吗?
Reproduction steps
无
Generated SQL
No response
Relation Model
No response
Screenshots
No response
Logs
Purpose: COMMAND(INTERCEPTOR)
SQL: select
tb_1_.ID,
tb_1_.certificate_code
from ky_enterprise_credential tb_1_
where
tb_1_.certificate_code = ? /* 1 */
JDBC response status: success
Time cost: 250ms
<===Execute SQL
2025-09-17T14:47:51.850+08:00 ERROR 22204 --- [ai-enterprise] [nio-8080-exec-1] c.k.a.e.config.GlobalExceptionHandler : 内部异常:
org.babyfish.jimmer.sql.exception.SaveException$NotUnique: Save error caused by the path: "<root>": Cannot save the entity, the value of the key property "[com.kongyue.ai.enterprise.entity.KyEnterpriseCredential.certificateCode]" is "1" which already exists
at org.babyfish.jimmer.sql.ast.impl.mutation.MutationContext.createConflictKey(MutationContext.java:293) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.Rows.findMapByKeys(Rows.java:105) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.Rows.findMapByKeys(Rows.java:70) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.AbstractPreHandler.findOldMapByKeys(PreHandler.java:237) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.UpsertPreHandler.onResolve(PreHandler.java:969) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.AbstractPreHandler.resolve(PreHandler.java:527) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.UpsertPreHandler.insertedMap(PreHandler.java:904) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.PreHandler$1.iterator(PreHandler.java:69) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.Saver.saveSelf(Saver.java:422) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.Saver.saveAllImpl(Saver.java:141) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.Saver.lambda$save$0(Saver.java:65) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.runtime.Internal.modifyDraft(Internal.java:193) ~[jimmer-core-0.9.94.jar:na]
at org.babyfish.jimmer.runtime.Internal.lambda$produceList$4(Internal.java:94) ~[jimmer-core-0.9.94.jar:na]
at org.babyfish.jimmer.runtime.Internal.usingDraftContext(Internal.java:122) ~[jimmer-core-0.9.94.jar:na]
at org.babyfish.jimmer.runtime.Internal.produceList(Internal.java:84) ~[jimmer-core-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.Saver.save(Saver.java:61) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.SimpleEntitySaveCommandImpl.executeImpl(SimpleEntitySaveCommandImpl.java:245) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.SimpleEntitySaveCommandImpl.lambda$execute$1(SimpleEntitySaveCommandImpl.java:223) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.spring.cfg.support.SpringConnectionManager.execute(SpringConnectionManager.java:56) ~[jimmer-spring-boot-starter-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.impl.mutation.SimpleEntitySaveCommandImpl.execute(SimpleEntitySaveCommandImpl.java:220) ~[jimmer-sql-0.9.94.jar:na]
at org.babyfish.jimmer.sql.ast.mutation.SimpleEntitySaveCommand.execute(SimpleEntitySaveCommand.java:287) ~[jimmer-sql-0.9.94.jar:na]
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working