gpt4 book ai didi

hibernate - 如何使用jpa查询嵌套对象

转载 作者:行者123 更新时间:2023-12-03 06:46:25 28 4
gpt4 key购买 nike

假设我有两个对象 Patient 及其具有 OneToMany 关系的 MedicalRecord。

class Patient {
...
@OneToMany(mappedBy = "patient")
List<MedicalRecord> mr;
...
}

class MedicalRecord {
...
@ManyToOne
Patient patient;

Date createdAt;
...
}

现在我想在一个月内使用医疗记录。做这个的最好方式是什么?

我知道我可以使用 JPQL 和 @NamedQuery 或 @Query 来做到这一点。但我感觉没有我想象的那么好。我可以在不发出 JPQL 查询的情况下执行此操作并保留在对象域中吗?例如,对“Patient.mr”字段添加约束,以便仅检索一个月内的记录,并且我可以迭代它们,而不必担心不必要的数据库获取?

谢谢!

最佳答案

此枚举包括日期范围:

public enum DateType {

PAST_DAY,

PAST_WEEK,

PAST_MONTH,

PAST_YEAR
}

此查询:

interface MedicalRecordRepository extends JpaRepository<MedicalRecord, Long> {
@Query("select md from MedicalRecord md left join fetch md.patient pt where md.createdAt >=:selectedDate")
List<MedicalRecord> searchByDate(selectedDate);
}

实现类:

     @Service
class MedicalRecordServiceImpl implements MedicalRecordService{

public List<MedicalRecord> searchByDate(DateType dateType){
Date today = new Date();
Calendar cal = new GregorianCalendar();
cal.setTime(today);

switch (dateType) {
case PAST_DAY:
cal.add(Calendar.DATE, -1);
break;
case PAST_WEEK:
cal.add(Calendar.DAY_OF_WEEK, -1);
break;
case PAST_MONTH:
cal.add(Calendar.DAY_OF_MONTH, -1);
break;
case PAST_YEAR:
cal.add(Calendar.YEAR, -1);
break;
}
List<MedicalRecord> result = repository.searchByDate(cal.getTime());
return result;
}
}

根据您选择的日期返回结果。

关于hibernate - 如何使用jpa查询嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34416934/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com