Spring Boot 如何使用下划线变量求解Sping Boot findBy方法

q1qsirdb  于 2023-01-09  发布在  Spring
关注(0)|答案(3)|浏览(211)

当我运行下面的项目时,我收到了以下错误。我该如何修复它?
原因:java. lang.非法参数异常:无法为方法公共摘要com. example. pharmanic. model. Rdhs_Hospital_Current_Stock com. example. pharmanic. repository创建查询. Rdhs_Hospital_Current_StockRepository. findBysr_no(java. lang. String)!未找到类型Rdhs_Hospital_Current_Stock的属性sr!
这是我的Rdhs_Hospital_Current_Stock模型类。

@Entity
@Data
@Table(name = "Rdhs_Hospital_Current_Stock")
public class Rdhs_Hospital_Current_Stock {
    @Id
    private Long batchId;
    private int quantity;
    private String expiredate;

    @ManyToOne
    private Hospital_By_Rdhs hospital_by_rdhs;

    @ManyToOne
    @JoinColumn(name = "sr_no", nullable = false, referencedColumnName = "sr_no")
    private Medicine medicine;

}

sr_noMedicine表的外键。
这是我的Medicine实体:

@Data
@Entity
public class Medicine {
    private @Id String sr_no;

    private String name;
    private String side_effect;
    private String description;

    public Medicine() {
    }

    public Medicine(String sr_no, String name, String side_effect, String description) {
        this.sr_no = sr_no;
        this.name = name;
        this.side_effect = side_effect;
        this.description = description;
    }
  }

当我将sr_nofindBy()函数一起使用时:

@GetMapping("/rhstock/{id}")
    ResponseEntity<?> getMedicine(@PathVariable String id){
        Optional<Rdhs_Hospital_Current_Stock> rdhs_hospital_current_stock = Optional.ofNullable(rdhs_hospital_current_stockRepository.findBysr_no(id));
         return rdhs_hospital_current_stock.map(response->ResponseEntity.ok().body(response)).orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
    }

这是我的仓库:

public interface Rdhs_Hospital_Current_StockRepository extends JpaRepository<Rdhs_Hospital_Current_Stock,Long> {
    Rdhs_Hospital_Current_Stock findBysr_no(String id);

}
xkftehaa

xkftehaa1#

灵感来源:Spring-Data-Jpa Repository - Underscore on Entity Column Name
下划线_是Spring Data查询派生中的保留字符(有关详细信息,请参阅参考文档),可能允许手动属性路径描述。

  • 坚持使用camel-case作为成员变量名的Java命名约定,一切都将按预期工作。
  • sr_no更改为srNo

更新存储库函数
Rdhs_Hospital_Current_Stock findBymedicine_srNo(String id);

nmpmafwu

nmpmafwu2#

我解决了这个错误。我在Reposity接口和控制器类中进行了如下更改
存储库接口-:

@Query(value="select * from Rdhs_Hospital_Current_Stock h where h.sr_no = :sr_no",nativeQuery=true)
 List<Rdhs_Hospital_Current_Stock> findBySr_no(@Param("sr_no")String sr_no);

控制器类-:

@RequestMapping(value = "/rhstocksr/{sr_no}", method = RequestMethod.GET)
    List<Rdhs_Hospital_Current_Stock> getBatchByMedicine(@PathVariable("sr_no") String sr_no) {
        return rdhs_hospital_current_stockRepository.findBySr_no(sr_no);

    }
wvt8vs2t

wvt8vs2t3#

要继续使用派生查询,可以将sr_no更改为srNo
您可以通过使用原生查询来解决这个问题,但我的建议是每次都使用派生查询,因为它是可以使用的。

相关问题