有没有办法使JPQL @Query注释动态化?

问题描述 投票:0回答:2

当前,我正在尝试在Spring项目中的存储库中进行JPQL查询,

这是我当前的存储库代码

@Query("select d.denda from DataTransaksi d WHERE d.tanggal= 1170130 AND d.nama = Suratno AND d.masaPajak=2016")
    Collection<DataTransaksiModel> findAllDenda();

但是,d.tanggald.namad.masaPajak将不会始终相同。我想在这里使用方法

        if(file.getContentType().equalsIgnoreCase("application/vnd.ms-excel")) {
            InputStreamReader input = new InputStreamReader(file.getInputStream());
            CSVParser csvParser = CSVFormat.EXCEL.withFirstRecordAsHeader().parse(input);
            for (CSVRecord record : csvParser) {
                String tanggal = record.get("Tanggal");
                String nama = record.get("Nama WP");
                String masaPajak = record.get("Masa Pajak");
                String denda = record.get("Denda");
                String jumlahSetoran = record.get("Jumlah Setoran");
                String pokok = record.get("Pokok");
                String luasTanah = record.get("L.Tanah");
                String luasBangunan = record.get("L. Bangunan");

其中d.tanggald.namad.masaPajak基于上传的CSV中的tanggalnamamasaPajak

是否有办法使d.tanggald.namad.masaPajak的值动态并遵循我们设置的变量?

java jpql
2个回答
1
投票

仅使用查询占位符

@Query("select d.denda from DataTransaksi d WHERE d.tanggal=:x AND d.nama = :y AND d.masaPajak=:z")
    Collection<DataTransaksiModel> findAllDenda(Longx,String y,Long z);

调整x,y,z类型以适合您的需求。您也可以重命名参数以更具描述性


0
投票

有两种方法可以执行此操作,

@Query("select d.denda from DataTransaksi d WHERE d.tanggal= ?1 AND d.nama = ?2 AND d.masaPajak=?3")
Collection<DataTransaksiModel> findAllDenda( Long x, String y, Long z); // These should be in exact order.

其他方法是使用命名参数,

@Query("select d.denda from DataTransaksi d WHERE d.tanggal= :x AND d.nama = :y AND d.masaPajak=:z")
Collection<DataTransaksiModel> findAllDenda( @Param("x") Long x, @Param("y") String y, @Param("z") Long z); 
© www.soinside.com 2019 - 2024. All rights reserved.