Spring boot 按字段查找弹簧靴

Spring boot 按字段查找弹簧靴,spring-boot,jpa,Spring Boot,Jpa,我需要通过一个不同于ID的字段获取一个寄存器,一个名为“rut_num”的int和惟一fild,但我在存储库查询中得到一个错误: 实体: @Entity @Table(name="paciente") public class Paciente { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private long id; @Column(name="rut_num") private

我需要通过一个不同于ID的字段获取一个寄存器,一个名为“rut_num”的int和惟一fild,但我在存储库查询中得到一个错误:

实体:

@Entity
@Table(name="paciente")
public class Paciente {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;

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

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

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

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

    //getters and setters
存储库:

@Repository("pacienteRepository")
public interface PacienteJpaRepository extends JpaRepository<Paciente, Serializable> {

    @Query("SELECT nombre FROM paciente WHERE rut_num= :rut_num")
    Future<String> findByRut(@Param("rut_num") int rut_num);
}
控制器:

@Controller
public class PacienteController {

    @Autowired
    @Qualifier("pacienteServiceImpl")
    private PacienteService pacienteService;

    @RequestMapping(value = "/paciente/{rut_num}", method = RequestMethod.GET, headers = "Accept=application/json")
    public ResponseEntity<Paciente> findByRut(@PathVariable("rut_num") int rut_num){
        Paciente paciente = pacienteService.findByRut(rut_num);
        if (paciente == null) {
            return new ResponseEntity(HttpStatus.NOT_FOUND);
            // You many decide to return HttpStatus.NOT_FOUND
        }
        return new ResponseEntity<Paciente>(paciente, HttpStatus.OK);
    }
}
@控制器
公共类PacientController{
@自动连线
@限定词(“PacientServiceImpl”)
私人PacientService PacientService;
@RequestMapping(value=“/paciente/{rut_num}”,method=RequestMethod.GET,headers=“Accept=application/json”)
公共响应findByRut(@PathVariable(“rut_num”)int rut_num){
Paciente Paciente=pacientservice.findByRut(rut_num);
if(paciente==null){
返回新的ResponseEntity(未找到HttpStatus.NOT_);
//您许多人决定返回HttpStatus.NOT_FOUND
}
返回新的响应状态(paciente,HttpStatus.OK);
}
}
控制台中的错误:

创建名为“PacientServiceImpl”的bean时出错:不满意 通过字段“pacienteRepository”表示的依赖关系;嵌套 例外情况为org.springframework.beans.factory.BeanCreationException: 创建名为“pacienteRepository”的bean时出错:调用init 方法失败;嵌套异常为java.lang.IllegalArgumentException: 方法公共摘要的查询验证失败 java.util.concurrent.Future com.calendar.repository.PacienteJpaRepository.findByRut(int)


我认为问题在于您在查询中引用的实体的名称是“Paciente”而不是“Paciente”,因此正在更改

@Query("SELECT nombre FROM paciente WHERE rut_num= :rut_num")
Future<String> findByRut(@Param("rut_num") int rut_num);
@Query(“从paciente中选择nombre,其中rut\u num=:rut\u num”)
未来的findByRut(@Param(“rut_num”)int rut_num);

@Query(“从Paciente中选择nombre,其中rut\u num=:rut\u num”)
未来的findByRut(@Param(“rut_num”)int rut_num);
应该有效


希望它有帮助

您的服务方法读取
(Paciente)pacienteRepository.findByRut(rut\u num)
,而您的存储库返回
Future
。为什么
未来的
可以根据您的自定义类型铸造?
@Query("SELECT nombre FROM paciente WHERE rut_num= :rut_num")
Future<String> findByRut(@Param("rut_num") int rut_num);
@Query("SELECT nombre FROM Paciente WHERE rut_num= :rut_num")
Future<String> findByRut(@Param("rut_num") int rut_num);