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