Keycloak 将用户添加到组时出现重复密钥异常

Keycloak 将用户添加到组时出现重复密钥异常,keycloak,Keycloak,我编写了一个EventListenerProvider,用于在用户完成注册后自动将新用户添加到组中。EventListenerProvider查找REGISTER事件并调用获取UserModel的一些代码: UserModel user = session.getContext().getAuthenticationSession().getAuthenticatedUser(); 如果该组不存在,则创建该组: group = session.getContext().getRealm().c

我编写了一个EventListenerProvider,用于在用户完成注册后自动将新用户添加到组中。EventListenerProvider查找REGISTER事件并调用获取UserModel的一些代码:

UserModel user = session.getContext().getAuthenticationSession().getAuthenticatedUser();
如果该组不存在,则创建该组:

group = session.getContext().getRealm().createGroup(groupName);
然后将用户添加到组中:

user.joinGroup(group);
问题在于,出于某种原因,
joinGroup
导致在user\u entity表上使用与注册期间创建的用户相同的id进行插入。这会导致出现唯一密钥冲突,出现以下部分堆栈跟踪:

keycloak_1  | 22:44:17,992 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) SQL Error: 0, SQLState: 23505
keycloak_1  | 22:44:17,992 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) ERROR: duplicate key value violates unique constraint "constraint_fb"
keycloak_1  |   Detail: Key (id)=(3e707ca2-6311-4d0b-bd56-786746b172f0) already exists.
keycloak_1  | 22:44:17,993 ERROR [org.keycloak.events.EventBuilder] (default task-1) Failed to send type to com.abinitio.sso.keycloak.event.EventListener@4d6c5c44: org.keycloak.models.ModelDuplicateException: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement
keycloak_1  |   at org.keycloak.keycloak-model-jpa@10.0.1//org.keycloak.connections.jpa.PersistenceExceptionConverter.convert(PersistenceExceptionConverter.java:57)
keycloak_1  |   at org.keycloak.keycloak-model-jpa@10.0.1//org.keycloak.connections.jpa.PersistenceExceptionConverter.invoke(PersistenceExceptionConverter.java:51)
keycloak_1  |   at javax.persistence.api@2.2.3//com.sun.proxy.$Proxy95.flush(Unknown Source)
keycloak_1  |   at org.keycloak.keycloak-model-jpa@10.0.1//org.keycloak.models.jpa.UserAdapter.joinGroupImpl(UserAdapter.java:389)
Postgres日志显示以下内容:

postgres_1  | 2020-05-20 22:44:17.991 UTC [34] ERROR:  duplicate key value violates unique constraint "constraint_fb"
postgres_1  | 2020-05-20 22:44:17.991 UTC [34] DETAIL:  Key (id)=(3e707ca2-6311-4d0b-bd56-786746b172f0) already exists.
postgres_1  | 2020-05-20 22:44:17.991 UTC [34] STATEMENT:  insert into public.USER_ENTITY (CREATED_TIMESTAMP, EMAIL, EMAIL_CONSTRAINT, EMAIL_VERIFIED, ENABLED, FEDERATION_LINK, FIRST_NAME, LAST_NAME, NOT_BEFORE, REALM_ID, SERVICE_ACCOUNT_CLIENT_LINK, USERNAME, ID) values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)
我不太清楚为什么
joinGroup
调用会导致在user\u entity表上插入

发生此错误后,正在注册的用户在数据库中不是。因此,我假设注册产生的用户创建从未提交。也许这仍然是挂起的,这就是为什么当
joinGroup
尝试提交时,会在user\u entity表上进行插入?在调用
joinGroup()
之前,我尝试调用
EntityManager.flush()
,但这并没有解决问题

希望得到一些建议