- Enviado
- 23 de septiembre de 2026 a las 14:39 UTC
- Autor
- Kamo
- Commit
- c4924af
Dos correcciones relacionadas con MemberRightsAppliedService, ambos en el mismo archivo: ¿Por qué? Eliminado y reinsertado incondicionalmente cada una de las filas de derechos aplicados de un miembro, cada vez huyeron. SecurityService's MemberRightsBackfillService llama la ruta de todo el org para TODOS los org on TODAS las botas de pod (una auto-sanación, por diseño – ver su propio javadoc), y la recomputación es idempotente: una bota de estado fijo re-derive el conjunto idéntico. Medido en producción pg stat statements: ~12.7M INSERT contra una mesa ~30K-row — aproximadamente 300 reescrituras de mesa completa, uno por bota, casi todos ellos escribiendo exactamente lo que ya estaba allí. Ambos métodos ahora difunden el conjunto recién llegado contra lo que member rights applied ya sostiene (una vracs leídas para todo un pedazo) y sólo claro + reescribir a los miembros cuyos derechos en realidad difieren. Una bota no-op cuesta una lectura y cero escribe. 2. calcularMemberRights (el núcleo de la ruta de escritura arriba y el solo lectura computeMemberRights SessionRefreshController encuestas sobre cada sesión refrescante) caminó member.getRoles(), ******************* roles()/getRights() y member.getRights() as separate lazy collections — plus one further lazy load per distinct role, por sus propios derechos. Sin límites por miembro. Seis nuevos campos de repositorio opcionales (MemberRoleRepository, DepartmentRoleRepository, DepartmentRightRepository, JobTitleRoleRepository, JobTitleRightRepository, MemberRightRepository — el primero y el último ya existió) sustituir esas cargas perezosas por un número fijo y pequeño de vracs consultas, cada una con sus propios derechos Uni-FETCHed. Deliberadamente NO un @EntityGraph arraigado en Member/TeamMember: both are @Inheritance(JOINED), and an entity graph that fetches further asociaciones fuera de una entidad unificada es la forma exacta que tomó /leads en producción en Hibernate 6.2.13 (missing DES-clause entry for the root table — see LeadAssigneeRef). Cada nuevo repositorio está en su lugar arraigado en la entidad NILD (na de los cuales lleva @Inheritance) y filtrado por la identificación del padre. Un campo EntityManager con @PersistenceContext fue probado primero y revertido: es procesado por El postprocesador del JPA de Spring siempre que la primavera-orm está en el hipódromo, por lo que un manualmente nuevo'd servicio en un contexto sin EntityManagerFactory bean (SignInReadRetry Pruebas de primavera a mano context, which exercises @RetryOnDbConflict through a real AOP proxy) failed BEAN CREATION Claro. Los campos de repositorio opcional degradan de la misma manera aplicadaModelResolver ya lo hizo: @Autowired(requerido = falso) los deja desnudos sin frijoles de ese tipo, y los seis ayudantes caen volver a la ruta original de carga perezosa, sin cambios, en cada prueba existente. SessionRefreshController mantiene la computación en vivo (no de la instantánea persistente) — ese punto final Todo el punto es "lo que es cierto ahora mismo", que no siempre es lo que persistió.
