2015-03-07 2 views
7

Кто-нибудь есть идеи, как получить один столбец с использованием Spring Data JPA? Я создал репозиторий, как показано ниже в моем проекте Spring Boot, но всегда получаю ошибку {"cause":null,"message":"PersistentEntity must not be null!"} при доступе к URL-адресу Restful.Выберите один столбец, используя Spring Data JPA

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

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

Тогда, если я получить доступ к RESTful URL как ../users/search/getUserName, я получаю ошибку: {"cause":null,"message":"PersistentEntity must not be null!"}

+2

Это работает для меня с JpaRepository. – kervin

ответ

-1

Если вам нужен список всех пользователей, попробуйте select userName from Users, если вам нужно одно использование пользователем "where" взгляд на весну данные JPA http://docs.spring.io/spring-data/jpa/docs/current/reference/html/, попробуйте изменить CrudRepository к JpaRepository

+0

Большое спасибо за ваш ответ. На самом деле это все еще не работает. У меня такая же ошибка. Если перечислить все столбцы, это работает, но не только в том случае, если их просто часть. – Alax

0

Если вы хотите возвращать только один столбец, вы должны смотреть на Projections and Excerpts, которая позволит фильтровать определенные столбцы и другие вещи, которые usefu ле.

1

Это работает для меня.

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

выше линии дал мне этот результат:

данные [Abhijeet, abhijeet1, abhijeet2, abhijeet3, abhijeet4, abhijeet5]

0

Концепция: В вашем классе сущностей создать конструктор с требуется только мгновенные переменные. И используйте этот конструктор в методе репозитория, показанном ниже.

Допустим, у вас есть интерфейс Repository как реализации ниже

  1. Repository:

    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. контроллер

    @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 
    }