[英]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.