gpt4 book ai didi

java - 使用哪个连接操作将多个表与 JPA/SQL 查询组合起来?

转载 作者:行者123 更新时间:2023-11-29 09:10:39 27 4
gpt4 key购买 nike

我有一个如下所示的 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();

我现在的问题是如何将所有 3 个表连接到单个 JPA 查询中以查找名字、街道和号码等信息?我已经尝试使用 LEFT JOIN,但是当例如 Telephone 表为空时我没有得到任何结果(如果所有表都有适当的条目,它可以正常工作)。例如,即使没有电话号码,我也希望有一个包含联系人的结果列表,即使联系人有多个电话号码,也只有一个结果。

非常感谢您的提前帮助。

最佳答案

您是否尝试过使用“LEFT OUTER JOIN”,例如下面?

           "SELECT DISTINCT c FROM Contact c LEFT OUTER JOIN c.addresses a LEFT OUTER 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();

关于java - 使用哪个连接操作将多个表与 JPA/SQL 查询组合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12628156/

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