簡體   English   中英

Spring-Boot Data JPA findByField 在 MySQL 表 REST 上不起作用

[英]Spring-Boot Data JPA findByField does not work on MySQL table REST

我想在 Java Spring Boot JPA 中查詢病毒表中枚舉類型的風險參數:

public interface VirusRepository extends JpaRepository<Virus, Long> {

    List<Virus> findByRisk(@RequestParam("risk") String risk);
}

這是我的病毒類:

@Entity
@Table(name = "virus")
@Data
public class Virus {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "mortality_rate")
    private float mortality_rate;

    @Column(name = "risk")
    private String risk;

    @Column(name = "year")
    private int year;

    @ManyToOne
    @JoinColumn(name = "treatment_id", nullable = false)
    private Treatment treatment;
}

我的治療表:(病毒有fk-key治療id)

@Entity
@Table(name = "treatment")
@Data
public class Treatment {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "name")
    private String name;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "treatment")
    private Set<Virus> viruses;
}

但是,當我輸入 url 時,我沒有得到所需的數據: http://localhost:9999/api/viruses/?risk=high

為什么? 是不是因為我在 MySQL Table Virus 實體上定義了 enum 類型的風險?:

http://localhost:9999/api/viruses/?name=SARS

**編輯:我自己才發現的,我忘了鏈接是:

http://localhost:9999/api/viruses/search/findByRisk?risk=high

然后我得到正確的回應。 **

我不知道您使用的是什么邏輯,但根據我的個人經驗,我從未見過 sombedy 將@RequestParam放在Repository interface
這就是我將如何做到的:

  1. 你的數據類很好,沒有什么可注意的
  2. 擴展JpaRepository的接口不是你的@RequestParam的地方。 嘗試這樣做:
 @Repository public interface VirusRepository extends JpaRepository<Virus, Long> { List<Virus> findByRiskContainingIgnoreCase(String risk); }
  1. 然后創建一個interface然后將映射所有方法:
 public interface VirusService { List<Virus> findByrisk(String risk); }
  1. 創建一個服務實現類來實現你所有的服務方法:
 @Service public class VirusServiceImpl implements VirusService { @Autowired private VirusRepository repository; @Override public List<Virus> findByRisk(String risk) { return repository.findByRiskContainingIgnoreCase(risk); } }
  1. 您創建將接受您的請求的controller
 @RestController @RequestMapping("/virus/") public class VirusController { @Autowired private VirusService service; @GetMapping("/findByRisk") public List<Virus> findByRisk(@RequestParam("risk") String risk) { return service.findByRisk(risk); } }
  1. 向您發出請求localhost:8080/risk/findByRisk應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM