Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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();