首页 > 解决方案 > 错误:从 Spring Boot 和 SQL Server 制作的 API 获取重复列表记录

问题描述

我在 SQL Server 中创建了一个存储过程,它工作正常,如下所示:

exec udf_get_gio_hang_by_id_khach_hang @id_khach_hang='KH00003368'

结果是 2 条记录,如下所示:

在此处输入图像描述

我的目的是创建一个 API 来获取上述记录的列表。所以我通过 Spring Boot 创建 API,如下所示:首先我创建一个模型GioHang.java

@Entity
public class GioHang implements Serializable {
    
    @Id
    private String id_khach_hang;
    
    
    private String id_xe;
    private int so_luong;
    
    //setter,getter

}

然后我创建了一个存储库接口GioHangRepo.java

@Repository
public interface GioHangRepo extends JpaRepository<GioHang,String> {
@Query(value = "{call udf_get_gio_hang_by_id_khach_hang(:id_khach_hang)}",nativeQuery = true)
    public List<GioHang> get_list_gio_hang_via_id_khach_hang(@Param("id_khach_hang")  String id_khach_hang);
}

接下来我创建了一个服务GioHangService.java

@Service
@Transactional
public class GioHangService {
    @Autowired
    private GioHangRepo gioHangRepo;

    public List<GioHang> getGioHangById_khach_hang(String id_khach_hang)
    {
        return this.gioHangRepo.get_list_gio_hang_via_id_khach_hang(id_khach_hang);
    }
}

最后,我在 GioHangResource.java

@RestController
@RequestMapping("/gio_hang")
public class GioHangResource {
    @Autowired
    private GioHangService gioHangService;
    
    @GetMapping("/getGioHangById_khach_hang/{id_khach_hang}")
    public ResponseEntity<List<GioHang>> getGioHangById(@PathVariable("id_khach_hang") String id_khach_hang)
    {
        List<GioHang> gh = this.gioHangService.getGioHangById_khach_hang(id_khach_hang);
        return new ResponseEntity<>(gh,HttpStatus.OK);
    }
}

我大摇大摆地测试 API,但我得到了如下重复记录的列表:

我不知道为什么列表中的记录都与第一条记录相同?

在此处输入图像描述

请帮我。

标签: javaspringspring-bootspring-mvcspring-data-jpa

解决方案


我猜这个错误是因为我在 SQL Server 中设置了主键id_khach_hang,但只为其中一个设置了如果 :为 and制作外键,并记住为id_xe@Id@Idid_khach_hangid_xeId_recordid_khach_hangid_xe@Idid_record


推荐阅读