skip to Main Content

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);
}

2

Answers


  1. 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"
    
    Login or Signup to reply.
  2. 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.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search