Home > Back-end >  I'm receiving one object using findAllBy in springBoot
I'm receiving one object using findAllBy in springBoot

Time:01-31

I'm trying to fetch all rows that have the same patient_id, so I'm doing findAllByPatientId. But I'm always receiving one object in the Listinstead of all the rows.


@Entity
@Getter
@Setter

public class MedicalHistory extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
@ManyToOne
@JoinColumn(name = "operator_id")
private MedicalOperator medicalOperatorId;


@ManyToOne
@JoinColumn(name = "illness_id")
private Illness illnessId;

@ManyToOne
@JoinColumn(name= "patientId")
private Patient patientId;
}
public List<MedicalHistory> getPatientMedicalRecords(PatientDto patientDto) {

    Optional<Patient> getPatient = patientRepository.findByNin(patientDto.getNin());
    Long patientId = getPatient.get().getPatientId();

    return medicalHistoryRepository.findAllByPatientId(patientId);
}

I want to receive multiple rows using the patient_id but instead, I'm always getting one !!. I tried native query and hibernate but nothing is working.

public interface MedicalHistoryRepository extends JpaRepository<MedicalHistory, Long> {

    //     List<MedicalHistory> findAllByPatientId(Long id);
  ArrayList<MedicalHistory> findMedicalHistoriesByPatientId(Long id);


  @Query(value = "SELECT * FROM medical_history WHERE patient_id = id",nativeQuery = true)
  List<MedicalHistory> findAllByPatientId(Long id);
}

CodePudding user response:

Now you are requesting "give me medical_history where id = patient_id" and getting only one result row.

You need to add a colon to the query to set a parameter to fix a result

value = "SELECT * FROM medical_history WHERE patient_id = :id"

CodePudding user response:

Look for JPQL, it's java persistancy query language and spring is automatically turning your @query into it. Spring is also supporting spEL you can also have a look to it here : https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query.spel-expressions where you can see than you can grab your parameters ever with ?number or with :name or putting @Param("name") into your parameters definition. As said before there is multiple ways to receive a parameter in you query but certainly not like you previously did. That's why you don't receive anything.

  • Related