web-dev-qa-db-fra.com

Spring JPA - "Java.lang.illegalargumentException: Le type de projection doit être une interface!" (Utilisation de la requête native)

J'essaie de récupérer une date d'horodatage d'une base de données Oracle, mais le code jette:

Java.lang.illegalargumentException: type de projection doit être une interface!

J'essaie d'utiliser une requête native car la requête d'origine est un moyen de complexe d'utiliser des méthodes jpa à ressort ou JPQL.

Mon code est similaire à celui-ci ci-dessous (désolé, je ne peux pas coller l'original, en raison de la politique de la société).

Entité:

@Getter
@Setter
@Entity(name = "USER")
public class User {

    @Column(name = "USER_ID")
    private Long userId;

    @Column(name = "USER_NAME")
    private String userName;

    @Column(name = "CREATED_DATE")
    private ZonedDateTime createdDate;
}

Projection:

public interface UserProjection {

    String getUserName();

    ZonedDateTime getCreatedDate();
}

Dépôt:

@Repository
public interface UserRepository extends CrudRepository<User, Long> {

    @Query(
            value = "   select userName as userName," +
                    "          createdDate as createdDate" +
                    "   from user as u " +
                    "   where u.userName = :name",
            nativeQuery = true
    )
    Optional<UserProjection> findUserByName(@Param("name") String name);
}

J'utilise le démarrage de printemps 2.1.3 et Hibernate 5.3.7.

14
Fábio Castilhos

Vous avez déclaré userId champ comme Long dans l'entité mais en UserProjection _ getUserId Type de retour est String. qui est incompatible tellement changer

String getUserId();

à

Long getUserId();

0
Alien