Error: duplicate list records when got from API that made from Spring Boot and SQL Server
Error: duplicate list records when got from API that made from Spring Boot and SQL Server
我在 SQL 服务器中创建了一个存储过程,它工作正常,如下所示:
exec udf_get_gio_hang_by_id_khach_hang @id_khach_hang='KH00003368'
结果是如下 2 条记录:
我的目的是创建一个 API 来获取上面的列表 record.So 我通过 Spring 引导创建 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
中创建了一个API
@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,但我得到了如下重复记录列表:
我不知道为什么列表中的记录都与第一条记录相同?
请帮助我。
我认为问题与您使用 id_khach_hang
作为主键有关,这应该是唯一的,但在您的情况下不会发生这种情况。您应该有一个应该具有唯一值的列并将其用于 @Id 属性.
此外,在java中编写代码时请不要使用蛇符号,它会使事情变得如此丑陋和难以理解。
我猜这个错误是因为我在 SQL 服务器中为 id_khach_hang
和 id_xe
设置了主服务器,但只是为其中一个设置了 @Id
如果说:
id_khach_hang
和 id_xe
的解决方案 1:Make @Id
解决方案 2:You 可以添加另一列,如 Id_record
,然后为其创建主键,并为 id_khach_hang
和 id_xe
创建外键。记住 make @Id
id_record
我在 SQL 服务器中创建了一个存储过程,它工作正常,如下所示:
exec udf_get_gio_hang_by_id_khach_hang @id_khach_hang='KH00003368'
结果是如下 2 条记录:
我的目的是创建一个 API 来获取上面的列表 record.So 我通过 Spring 引导创建 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,但我得到了如下重复记录列表:
我不知道为什么列表中的记录都与第一条记录相同?
请帮助我。
我认为问题与您使用 id_khach_hang
作为主键有关,这应该是唯一的,但在您的情况下不会发生这种情况。您应该有一个应该具有唯一值的列并将其用于 @Id 属性.
此外,在java中编写代码时请不要使用蛇符号,它会使事情变得如此丑陋和难以理解。
我猜这个错误是因为我在 SQL 服务器中为 id_khach_hang
和 id_xe
设置了主服务器,但只是为其中一个设置了 @Id
如果说:
id_khach_hang
和 id_xe
的解决方案 1:Make @Id
解决方案 2:You 可以添加另一列,如 Id_record
,然后为其创建主键,并为 id_khach_hang
和 id_xe
创建外键。记住 make @Id
id_record