...
Code Block |
---|
@Autowired private ApiRepository apiRepository; private static final String API="Api"; //Nombre de la clase Java, respetar Mayus. .... @SuppressWarnings("unchecked") public <R extends JpaRepository<T, I>, T, I> R getJpaRepository(T versionable) { switch (versionable.getClass().getSimpleName()) { .... case API: return (R) apiRepository; .... } @SuppressWarnings("unchecked") public <S> S save(Versionable<S> versionable) { switch (versionable.getClass().getSimpleName()) { ..... case API: return (S) apiRepository.save((Api) versionable); ..... } |
3. Métodos en el repositorio
Es necesario que el repositorio de la entidad Versionable implemente el siguiente método:
Code Block |
---|
@Modifying
@Transactional
void deleteByIdNotIn(Collection<String> ids); |
En algunos casos de modelo de entidad-relación complejos, se tendrá que implementar un default, por ejemplo en realms (App.java)
Code Block |
---|
@Modifying
@Transactional
@Query(value = "DELETE FROM APP_ASSOCIATED WHERE APP_ASSOCIATED.PARENT_APP NOT IN :ids OR APP_ASSOCIATED.CHILD_APP NOT IN :ids", nativeQuery = true)
void deleteAppAssociatedWhereIdNotIn(@Param("ids") Collection<String> ids);
@Modifying
@Transactional
@Query(value = "DELETE FROM APP_ASSOCIATED_ROLES", nativeQuery = true)
void deleteAppAssociatedRoles();
@Modifying
@Transactional
@Query("DELETE FROM App AS p WHERE p.id NOT IN :ids")
void deleteByIdNotInCustom(@Param("ids") Collection<String> ids);
@Modifying
@Transactional
default void deleteByIdNotIn(Collection<String> ids) {
deleteAppAssociatedWhereIdNotIn(ids);
deleteAppAssociatedRoles();
deleteByIdNotInCustom(ids);
} |
4. Consideraciones extra si la entidad no extiende de OPResource
1. Find By User
Para el caso de entidades versionables que no extiendan de OPResource habrá dos casos:
...
Esto es necesario para que funcionen ciertas funcionalidades para usuarios no administradores.
2. Find versionable views
Se tendrá que añadir el método findVersionableViews, tómese el siguiente ejemplo. Se necesita pasar como argumento, la identifcación, id y nombre de la clase al constructor.
Code Block |
---|
@Query("SELECT new com.minsait.onesait.platform.config.versioning.VersionableVO(o.userId, o.userId, 'User') FROM User AS o") public List<VersionableVO> findVersionableViews(); |