提问者:小点点

如何编写jpa查询?在存储库中


在这里输入图像描述,这个img是用户表,这里是示例元组,

我想使用sql查询SELECT MAX(KEY_NAME)OF USER;并在这里输入图像描述所以在java,我写了jpa查询,但我遇到了错误16148

2023-02-01 20:58:51.668 ERROR 16148---[nio-8080-exec-7]o.a.c.c.C.[.[.[ /].[的servlet()在上下文with path[]中抛出异常[请求处理失败;嵌套异常是org.springframe.dao.InvalidDataAccessApiUsageException:类型指定的类型为TyedQuery[gdsc.toypj.dutchpayit.domain.User]与查询返回类型[class java.lang.Long]不兼容;嵌套异常是java.lang.IllegalArgumentException:类型指定的TyestQuery[gdsc.toypj.dutchpayit.domain.User]与查询返回类型[class java.lang.Long]不兼容

这里我的来源

UserRepository.java


public User findOneUser() {
    return em.createQuery("select MAX(r.id) from User r", User.class)
            .getSingleResult();
}

User.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "key_name")
private Long id;

private String name;

@OneToMany(mappedBy = "user",cascade = CascadeType.ALL)
private List<Menu> menuList = new ArrayList<>();

@OneToMany(mappedBy = "user",cascade = CascadeType.ALL)
private List<People> peopleList = new ArrayList<>();

public static User addUser(String name){
    User user = new User();
    user.setName(name);
    return user;
}

UserService.java

@Transactional
public User OneUser(){
    User user = userRepository.findOneUser();
    return user;
}

UserController.java


@GetMapping("/get/one")
public ResponseEntity getOneUser(){

    User user = userService.OneUser();
    return ResponseEntity.status(HttpStatus.OK).body(new SuccessResponse(200,user));

}

我已经试了3个多小时了…

在UserRepository.java,我尝试了他们和错误的一切。

em. createQuery("select MAX(r.Key_name)from User r",User.class)

em. createQuery("select id from User",User.class)

哦这奏效了

return em.createQuery("select r from User r", User.class)
.getResultList();

为什么只有“select r”有效我不知道!!!!


共1个答案

匿名用户

该错误来自定义为返回User对象的TyedQuery。

您可以尝试将TyedQuery更改为Long或创建另一个将User作为对象返回的查询。

你可以用类似这样的东西:

select r from User r where r.id = (select MAX(r.id) from User r)