有没有人知道如何使用Spring Data JPA获取单个列?我在Spring Boot项目中创建了一个类似下面的存储库,但在访问Restful URL时总是出现{"cause":null,"message":"PersistentEntity must not be null!"}
错误。
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UsersRepository extends CrudRepository<Users, Integer> {
@Query("SELECT u.userName FROM Users u")
public List<String> getUserName();
}
然后,如果我访问像../users/search/getUserName
这样的Restful URL,我会收到错误消息:
{"cause":null,"message":"PersistentEntity must not be null!"}
答案 0 :(得分:5)
创建一个投影界面
public interface UserNameOnly {
String getUserName();
}
然后在您的存储库界面中返回该类型,而不是用户类型
public interface UserRepository<User> extends JpaRepository<User,String> {
List<UsernameOnly> findNamesByUserNameNotNull();
}
投影接口中的get方法必须与JPA存储库(在这种情况下为User)上已定义类型的get方法匹配。 “ findBySomePropertyOnTheObjectThatIsNotNull”允许您基于某些条件获取实体列表(与Iterable相对),对于findAll来说,只要唯一标识符(或任何其他NonNull字段)不为null,就可以简单地找到它。
答案 1 :(得分:2)
这适合我。
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]
答案 2 :(得分:1)
概念是:在您的实体类中创建仅包含所需即时变量的构造函数。并在下面显示的存储库方法中使用该构造函数。
假设您有一个接口存储库,如下所示
存储库实施:
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);
}
在控制器
中@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
}
答案 3 :(得分:0)
如果您只想返回一个列,您应该查看Projections and Excerpts,这样您就可以过滤特定列和其他有用的列。
答案 4 :(得分:-1)
如果您需要列出所有用户,请尝试select userName from Users
,如果您需要一位用户使用"where"
查看spring数据JPA http://docs.spring.io/spring-data/jpa/docs/current/reference/html/,请尝试将CrudRepository更改为JpaRepository