2 votes

findAll se heurte à findAll avec CrudRepository dans Projections

Connexion

@ApiModel
@Entity
public class Login {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private LocalDateTime loginDateTime;

    /** Other fields ***/
} 

LoginDateOnly

interface LoginDateOnly {

    @Value("#{target.loginDateTime.toLocalDate()}")
    LocalDate getDateFromLoginDateTime();

}

Référentiel de connexion

@RepositoryRestResource(collectionResourceRel = "login", path = "login")
public interface LoginRepository extends PagingAndSortingRepository<Login, Long> {

    Collection<LoginDateOnly> findAll();

    /** Other query methods **/
}

Je veux simplement obtenir tous ma fiche de connexion, avec LocalDate part de mon loginDateTime sélectionnés/projetés à l'aide d'un http://host/api/login . Mais actuellement, je rencontre un problème avec findAll() de CrudRepository. Comment résoudre cela autant que possible en utilisant la projection. Je fais de @Query et @NamedQuery mon dernier recours.

2voto

Cepr0 Points 7789

A findAll la signature de la méthode est :

List<T> findAll();

Si vous voulez la remplacer, vous ne pouvez pas utiliser une autre signature.

Pour obtenir une liste de vos projections, il suffit de définir une autre méthode pour cela, par exemple :

Collection<LoginDateOnly> findAllBy();

Mais comme je peux le voir, vous utilisez Spring Data REST, donc dans ce cas vous n'avez pas besoin de définir une nouvelle méthode. Vous devez d'abord ajouter l'annotation @Projection à votre projection :

@Projection(name = "loginDateOnly", types = Login.class)
interface LoginDateOnly {
    //...
}

Utilisez ensuite son nom dans l'url de la requête :

GET http://host/api/login?projection=loginDateOnly

Voir plus d'informations dans le document : Projections et extraits

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X