web-dev-qa-db-fra.com

Sélectionnez une colonne en utilisant Spring Data JPA

Quelqu'un sait-il comment obtenir une seule colonne à l'aide de Spring Data JPA? J'ai créé un référentiel comme ci-dessous dans mon projet Spring Boot, mais le message d'erreur {"cause":null,"message":"PersistentEntity must not be null!"} s'affiche toujours lorsque vous accédez à l'URL restante.

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UsersRepository extends CrudRepository<Users, Integer> {

    @Query("SELECT u.userName  FROM Users u")
    public List<String> getUserName();
}

Ensuite, si j'accède à l'URL restante comme ../users/search/getUserName, j'obtiens le message d'erreur suivant: {"cause":null,"message":"PersistentEntity must not be null!"}

9
Alax

Cela fonctionne pour moi.

public interface UserDataRepository extends JpaRepository<UserData, Long> {

    @Query(value = "SELECT emp_name FROM user_data", nativeQuery = true)
    public List<Object[]> findEmp_name();
}


System.out.println("data"+  userDataRepository.findEmp_name());

La ligne ci-dessus m'a donné ce résultat: 

données [abhijeet, abhijeet1, abhijeet2, abhijeet3, abhijeet4, abhijeet5]

2
Abhijeet Behare

Le concept est: Dans votre classe d'entité, créez un constructeur avec uniquement les variables instantanées requises. Et utilisez ce constructeur dans la méthode de référentiel indiquée ci-dessous.

Disons que vous avez un référentiel d'interface comme ci-dessous 

  1. Mise en œuvre du référentiel:

    public interface UserRepository<User> extends JpaRepository<User,String>
    {
        @Query(value = "select new com.org.User(usr.userId) from User usr where usr.name(:name))")
        List<User> findUserIdAlone(@Param("name") String user);
    }
    
  2. Dans le contrôleur 

    @RestController
    public class UserController 
    {
        @Autowired
        private UserRepository<User> userRepository; 
    
        @Res
        public ResponseEntity<User> getUser(@PathVariable("usrname") String userName)
        {
            User resultUser = usrRepository.findUserIdAlone(userName);
            return ResponseEntity.ok(resultUser);
        }
    }
    
    public class User 
    {
    
        private String userId,userName;
    
        public User(String userId) 
        {
            this.userId=userId;
        }
        // setter and getters goes here
    }
    
1
Ethiraj

Si vous souhaitez ne renvoyer qu'une seule colonne, vous devez examiner Projections et extraits qui vous permettra de filtrer des colonnes spécifiques et d'autres éléments utiles.

0
Hatem Jaber