[英]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/search/findByRisk?risk=high
然后我得到正確的回應。 **
我不知道您使用的是什么邏輯,但根據我的個人經驗,我從未見過 sombedy 將@RequestParam
放在Repository interface
。
這就是我將如何做到的:
JpaRepository
的接口不是你的@RequestParam
的地方。 嘗試這樣做:@Repository public interface VirusRepository extends JpaRepository<Virus, Long> { List<Virus> findByRiskContainingIgnoreCase(String risk); }
interface
然后將映射所有方法:public interface VirusService { List<Virus> findByrisk(String risk); }
@Service public class VirusServiceImpl implements VirusService { @Autowired private VirusRepository repository; @Override public List<Virus> findByRisk(String risk) { return repository.findByRiskContainingIgnoreCase(risk); } }
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); } }
localhost:8080/risk/findByRisk
應該沒問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.