wake-up-neo.com

Wählen Sie eine Spalte mit Spring Data JPA aus

Hat jemand eine Idee, wie man mit Spring Data JPA eine einzelne Spalte erhält? Ich habe in meinem Spring Boot-Projekt ein Repository wie unten beschrieben erstellt. Beim Zugriff auf die Restful-URL wird jedoch immer die Fehlermeldung {"cause":null,"message":"PersistentEntity must not be null!"} angezeigt.

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

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

Wenn ich dann wie ../users/search/getUserName auf die Restful-URL zugreife, erhalte ich die Fehlermeldung: {"cause":null,"message":"PersistentEntity must not be null!"}

9
Alax

Das funktioniert für mich.

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

Die obige Zeile gab mir dieses Ergebnis: 

data [abhijeet, abhijeet1, abhijeet2, abhijeet3, abhijeet4, abhijeet5]

2
Abhijeet Behare

Konzept ist: Erstellen Sie in Ihrer Entitätsklasse einen Konstruktor mit nur erforderlichen Instant-Variablen. Und verwenden Sie diesen Konstruktor in der unten gezeigten Repository-Methode.

Nehmen wir an, Sie haben ein Schnittstellen-Repository wie unten 

  1. Repository-Implementierung:

    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. Im Controller 

    @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

Wenn Sie nur eine einzelne Spalte zurückgeben möchten, sollten Sie unter Projektionen und Auszüge nachsehen, um bestimmte Spalten und andere nützliche Elemente zu filtern.

0
Hatem Jaber