经过无数次尝试,我在这里寻求大家的帮助。但是非常需要解决方案。
我有一个父(患者)实体及其子(地址)实体。我要获取所有已注册患者和地址的详细信息,其中地址详细信息可能为空。意思是,患者可能没有地址详细信息。
我已经使用CriteriBuilder编写了这样的逻辑
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));
请找到Patinet和地址实体供您参考,
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 -------------------------
将等待您有价值的解决方案谢谢..
经过无数次尝试,我在这里寻求大家的帮助。但是非常需要解决方案。我有一个父(患者)实体及其子(地址)实体。我想获取所有已注册的位置...
[您似乎正在使用inner join
,应该使用outer joins
类似,