Java 错误:从Spring Boot和SQL Server生成的API中获取的列表记录重复
我在SQL Server中创建了一个存储过程,它工作正常,如下所示:Java 错误:从Spring Boot和SQL Server生成的API中获取的列表记录重复,java,spring,spring-boot,spring-mvc,spring-data-jpa,Java,Spring,Spring Boot,Spring Mvc,Spring Data Jpa,我在SQL Server中创建了一个存储过程,它工作正常,如下所示: exec udf_get_gio_hang_by_id_khach_hang @id_khach_hang='KH00003368' 结果是2条记录,如下所示: exec udf_get_gio_hang_by_id_khach_hang @id_khach_hang='KH00003368' 我的目的是创建一个API来获取上述记录的列表。因此,我通过Spring Boot创建API,如下所示: 首先,我创建了一个模型G
exec udf_get_gio_hang_by_id_khach_hang @id_khach_hang='KH00003368'
结果是2条记录,如下所示:
exec udf_get_gio_hang_by_id_khach_hang @id_khach_hang='KH00003368'
我的目的是创建一个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
}
@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);
}
@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);
}
}
@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);
}
}
然后我创建了一个存储库接口GioHangRepo.java
@Entity
public class GioHang implements Serializable {
@Id
private String id_khach_hang;
private String id_xe;
private int so_luong;
//setter,getter
}
@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);
}
@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);
}
}
@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);
}
}
最后,我在GioHangResource.java
@Entity
public class GioHang implements Serializable {
@Id
private String id_khach_hang;
private String id_xe;
private int so_luong;
//setter,getter
}
@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);
}
@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);
}
}
@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);
}
}
@RestController
@请求映射(“/gio_hang”)
公共类资源{
@自动连线
私人GIONHANGSERVICE GIONHANGSERVICE;
@GetMapping(“/getGioHangById\u khach\u hang/{id\u khach\u hang}”)
公共响应getGioHangById(@PathVariable(“id_khach_hang”)字符串id_khach_hang)
{
List gh=this.gioHangService.getGioHangById_khach_hang(id_khach_hang);
返回新的响应状态(gh、HttpStatus.OK);
}
}
我在swagger中测试API,但得到了如下重复记录列表:
exec udf_get_gio_hang_by_id_khach_hang @id_khach_hang='KH00003368'
我不知道为什么列表中的记录都和第一条记录一样
请帮帮我。我认为问题与您使用
id\u khach\u hang
作为主键有关,主键应该是唯一的,在您的情况下不会发生这种情况。您应该有一个具有唯一值的列,并将其用于@Id属性
另外,在用java编写代码时,请不要使用snake符号,这会使事情变得非常难看和难以理解。我想这个错误是因为我在SQL Server中为
id\u khach\u hang
和id\u xe
设置了primary,但只为其中一个设置了@id
如果:
解决方案1:为Id\u khach\u hang
和Id\u xe
解决方案2:您可以添加另一个列,如
Id\u record
,然后为其生成主键,并为Id\u khach\u hang
和Id\u xe
生成外键。记住Id\u record
的make/Id>是的,这是我想要的。谢谢