【发布时间】:2020-05-26 02:22:53
【问题描述】:
经过多次尝试,我在这里寻求你们中的任何人的帮助。非常需要一个解决方案。
我有一个父(患者)实体及其子(地址)实体。 我想获取所有已注册的患者和地址详细信息,地址详细信息可能为空。意思是,患者可能没有地址详细信息..
我已经像这样使用 CriteriaBuilder 编写了逻辑
CriteriaBuilder builder = this.em.getCriteriaBuilder();
CriteriaQuery<Object[]> query = builder.createQuery(Object.class);
Root<TaskImpl> patientRoot = query.from(Patient.class);
Root<ContentImpl> addressRoot = query.from(Address.class);
query.multiselect(patientRoot.get("patinetId"),patientRoot .get("patinetName"),
addressRoot.get("city));
Predicate patAddressJoinPred = builder.equal(
patientRoot.get("patientId"),
addressRoot.get("patient").get("patientId"));
query.where(builder.and(patAddressJoinPred));
请为您的 ref 找到 Patient 和 Address 实体,
Patient.java-----------------
@Entity
public class Patinet{
@Id
private Long patentId;
private String patientName;
}
------------------------------
Address.java------------------
@Entity
public class Address{
@Id
private Long addressId;
private String city;
@OneToOne(FetchType.Lazy)
@JoinColumn("patinet_id")
private Patient patient;
}
-------------------------------
但是在标准构建器之后,我在地址实体上应用了交叉连接,这将是一个性能问题,我无法获取没有地址详细信息的患者的详细信息..
为简单起见,下面给出了示例数据和我所需的输出。
Patient table
-------------
id | name
-------------
1 | Sameul
2 | Jhon
3 | khan
4 | Lee
-------------
Address table
-----------------------
id | city | patient_id
-----------------------
1 | Blz | 1
2 | Stn | 3
需要输出
-------------------------
id | patientName | city
-------------------------
1 | Sameul | blz
2 | Jhon |
3 | khan | stn
4 | Lee |
但是变成这样
-------------------------
id | patientName | city
-------------------------
1 | Sameul | blz
3 | khan | stn
-------------------------
将等待您的宝贵解决方案 谢谢。。
【问题讨论】:
标签: java hibernate spring-data-jpa jpa-2.0