Spring Boot Spring JPA的最高ID

vlju58qv  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(259)

我有一个postgresql数据库,有两列,我想显示Sping Boot 时的最新条目。最新条目是ID最高的行。我这样做了,但它不起作用:

@Entity
public class Messwerte implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private double temperatur;

    public Messwerte() {
    }
//getters, setters, etc.

@Repository
public interface MesswertRepository extends JpaRepository<Messwerte, Long> {
  @Query("SELECT max(id) from messwerte")
  public List<Messwerte> getMaxID(Long id); 
}

@Service
@Transactional
public class MesswerteService
{
  @Autowired
  private MesswertRepository messwerteRepository;

  public List<Messwerte> getMaxId(Long id)
  {
    return messwerteRepository.getMaxID(id); 
  }
}

@GetMapping("/maxId")
    public ResponseEntity<List<Messwerte>> getMaxId(@PathVariable Long id) {
      return new ResponseEntity<>(service.getMaxId(id), HttpStatus.OK);
    }

第一次
我是新来的春 Boot ,所以请帮助我!

sg3maiej

sg3maiej1#

它不起作用,因为您的查询返回max(id)而不是行。这意味着查询的结果将是Long而不是Messwerte
您还需要一个未使用的参数。
重写查询的一种方法是使用子查询:

@Query("select m from Messwerte m where m.id = (select max(id) from Messwerte)")
public Messwerte getMaxID();

请注意,因为这个查询最多返回一个结果,所以我将返回值更改为Messwerte
这也应该行得通:

@Query("select m from Messwerte m where m.id = (select max(id) from Messwerte)")
public Optional<Messwerte> getMaxID();

相关问题