如何使用spring-data-jpa派生查询方法获取表中的最大值(列),其中列是数字类型

tct7dpnv  于 2023-01-20  发布在  Spring
关注(0)|答案(2)|浏览(451)

我正在尝试从用户表中获取最大值(uid

public class UserEntity {
    @Id
    private Long uid;
    private String name;
    private String email;
}
@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long> {
    Long findMaxUid();
}

我尝试在applicationRunner方法中调用userRepository中的findMaxUid()函数。

@SpringBootApplication
public class App{

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Bean
    ApplicationRunner applicationRunner(UserRepository userRepository) {
        return args -> {
            userRepository.save(UserEntity.builder().uid(101L).build());
            System.out.println(userRepository.findMaxUid());
        };
    }

}

我已经不例外了。
一个一个三个一个一个一个一个一个四个一个一个一个一个一个五个一个

4uqofj5v

4uqofj5v1#

试试这样的方法:

@Query(value = "SELECT MAX(u.uid) FROM UserEntity u")
Long findMaxUid();
dxxyhpgq

dxxyhpgq2#

根据我的评论,你可以尝试以下方法(免责声明:我现在无法测试,所以我不确定这是否有效):

interface UidView {
  Long getUid();
} 

@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long> {
  //order by uid, get the top entry having the largest uid, use a projection to only read the uid
  UidView findTopByOrderByUidDesc();

  //default method that translates the call and return type
  default Long findMaxUid() {
    UidView top = findTopByOrderByUidDesc();
    return top != null ? top.getUid() : null; 
  }
}

相关问题