繁体   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