使用Spring数据JPA选择一列
有人知道如何使用SpringDataJPA获取单个列吗?我在我的Spring Boot项目中创建了一个存储库,如下所示,但在访问Restful URL时总是出现使用Spring数据JPA选择一列,spring,spring-boot,spring-data-jpa,spring-data-rest,Spring,Spring Boot,Spring Data Jpa,Spring Data Rest,有人知道如何使用SpringDataJPA获取单个列吗?我在我的Spring Boot项目中创建了一个存储库,如下所示,但在访问Restful URL时总是出现{“cause”:null,“message”:“PersistentEntity不得为null!”}错误 @RepositoryRestResource(collectionResourceRel = "users", path = "users") public interface UsersRepository extends Cr
{“cause”:null,“message”:“PersistentEntity不得为null!”}
错误
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UsersRepository extends CrudRepository<Users, Integer> {
@Query("SELECT u.userName FROM Users u")
public List<String> getUserName();
}
@RepositoryRestResource(collectionResourceRel=“users”,path=“users”)
公共接口UsersRepository扩展了Crudepository{
@查询(“从用户u中选择u.userName”)
公共列表getUserName();
}
然后,如果访问Restful URL,如。/users/search/getUserName
,则会出现错误:
{“cause”:null,“message:“persistenententity不能为null!”
如果需要列出所有用户,请尝试从用户中选择用户名
,如果需要一个用户使用“where”
查看spring数据JPA,尝试将crudepository更改为JpaRepository如果您只想返回一个列,您应该查看该列,它将允许您筛选特定的列和其他有用的内容。这对我很有用
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());
公共接口UserDataRepository扩展了JpaRepository{
@查询(value=“从用户数据中选择emp\U名称”,nativeQuery=true)
公共列表findEmp_name();
}
System.out.println(“数据”+userDataRepository.findEmp_name());
上面这行给了我这个结果:
数据[abhijeet,abhijeet1,abhijeet2,abhijeet3,abhijeet4,abhijeet5]概念是:在实体类中创建一个只包含所需即时变量的构造函数。并在如下所示的存储库方法中使用该构造函数 假设您有一个如下所示的接口存储库
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);
}
public interface UserRepository扩展了JpaRepository
{
@查询(value=“从用户usr中选择新的com.org.User(usr.userId),其中usr.name(:name)”)
列出findUserIdAlone(@Param(“name”)字符串用户);
}
@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
}
@RestController
公共类用户控制器
{
@自动连线
私有用户存储库用户存储库;
@Res
公共响应属性getUser(@PathVariable(“usrname”)字符串用户名)
{
User resultUser=usrRepository.findUserIdAlone(用户名);
返回ResponseEntity.ok(resultUser);
}
}
公共类用户
{
私有字符串userId,userName;
公共用户(字符串用户ID)
{
this.userId=userId;
}
//塞特和盖特在这里
}
创建投影界面
public interface UserNameOnly {
String getUserName();
}
然后在存储库界面中返回该类型,而不是用户类型
public interface UserRepository<User> extends JpaRepository<User,String> {
List<UsernameOnly> findNamesByUserNameNotNull();
}
public interface UserRepository扩展了JpaRepository{
列出findNamesByUserNameNotNull();
}
投影界面中的get方法必须与JPA存储库中定义类型的get方法(在本例中为User)匹配。
“FindBysomePropertyontheObjectThatNotNull”允许您根据某些条件获取实体列表(与Iterable相反),对于findAll,如果唯一标识符(或任何其他非null字段)不为null,则可以简单地获取实体列表。非常感谢您的回答。实际上,它仍然不起作用。我也犯了同样的错误。如果要列出所有列,它会起作用,但如果只是其中的一部分,则不起作用。这对我来说适用于JpaRepository。这是@Query(value=“select new com.org.User(usr.userId)from User usr where usr.name(:name)))部分的一个额外括号吗?@AzySır将其删除。谢谢。这似乎不适用于自定义对象。如果你看到对象在哪里[]我有一个自定义对象,它没有工作。@ Alax,你会考虑接受我的答案吗?这不是解决方案TBH,投影选择所有领域无论如何。