我有一个 JPA 数据库设置,如下所示:
@Entity
public class Contact {
@Id
private Long id;
@Column(length = 64)
private String firstname;
@Column(length = 64)
private String surname;
@OneToMany(mappedBy = "contact")
private List<Address> adresses = new ArrayList<Address>();
@OneToMany(mappedBy = "contact")
private List<Telephone> telephones = new ArrayList<Telephone>();
}
@Entity
public class Address {
@Id
private Long id;
@Column(length = 128)
private String street;
@Column(length = 16)
private String plz;
@ManyToOne
private Contact contact;
}
@Entity
public class Telephone {
@Id
private Long id;
@Column(length = 32)
private String number;
@ManyToOne
private Contact contact;
}
现在我的搜索表单有以下查询:
em.createQuery("SELECT DISTINCT c FROM Contact c LEFT JOIN c.addresses a LEFT JOIN c.telephones t "
+ "WHERE c.surnameLIKE '%"+var_surname+"%' "
+ "AND c.firstname LIKE '%"+var_firstname+"%' "
+ "AND a.street LIKE '%"+var_street+"%'"
+ "AND t.nummer LIKE '%"+var_telephone+"%'"
).getResultList();
我现在的问题是如何在一个 JPA 查询中加入所有 3 个表以查找名字、街道和号码?我已经尝试过使用 LEFT JOIN,但是当例如 Telephone 表为空时(如果所有表都有适当的条目,它可以正常工作),我没有得到任何结果。即使没有电话号码,我也希望有一个包含联系人的结果列表,即使联系人有多个电话号码,也只有一个结果。
非常感谢您提前提供的帮助。