【发布时间】:2019-01-30 06:33:07
【问题描述】:
我无法使用以下查询从两个表中获取所有记录
我已经尝试过了,但我只能从一张表中得到结果。我想要两个表的结果,即 client_software_param_mapping 和 client_file_configuration 具有相同的 ClientId,这是从第三个 pojo(client_software_configuration) 到第一个和第二个 pojo 的外键。
public Result showClientConfiguration() {EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("defaultPU");
EntityManager entityManager = entityManagerFactory.createEntityManager();
Query q=entityManager.
createQuery("SELECT c FROM client_software_param_mapping c JOIN fetch client_file_configuration f ON c.ClientId=f.ClientId");
List data =q.getResultList();
return ok(Json.toJson(data));
}
第一个pojo
@Entity
public class client_file_configuration {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String sourceFolder;
private String sourceFile;
private String processingFolder;
private String processingFile;
private String processedFolder;
private int intervalInMin;
private String readAfterDelay;
private String parserClass;
private String directoryMode;
private String fileMode;
private String actionMode;
private String type;
private String fileExpressionResolver;
@OneToOne
@JoinColumn(name = "ClientId")
private client_software_configuration clientSoftwareConfiguration;
public client_software_configuration getClientSoftwareConfiguration() {
return clientSoftwareConfiguration;
}
public void setClientSoftwareConfiguration(client_software_configuration clientSoftwareConfiguration) {
this.clientSoftwareConfiguration = clientSoftwareConfiguration;
}
}
第二波乔
@Entity
public class client_software_param_mapping {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String paramKey;
private String paramValue;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getParamKey() {
return paramKey;
}
public void setParamKey(String paramKey) {
this.paramKey = paramKey;
}
public String getParamValue() {
return paramValue;
}
public void setParamValue(String paramValue) {
this.paramValue = paramValue;
}
@ManyToOne
@JoinColumn(name = "ClientId")
private client_software_configuration clientSoftwareConfiguration;
public client_software_configuration getClientSoftwareConfiguration() {
return clientSoftwareConfiguration;
}
public void setClientSoftwareConfiguration(client_software_configuration clientSoftwareConfiguration) {
this.clientSoftwareConfiguration = clientSoftwareConfiguration;
}
}
第三波乔
@Entity
public class client_software_configuration {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String url;
private int port;
private String endPoint;
private String isPost;
private String isPing;
private String params;
private int serialNo;
private String dateFormat;
private String token;
}
【问题讨论】:
-
阅读有关 JPQL 的基本 JPA 文档。您使用 FETCH JOIN 在关系上而不是随机的其他类!
-
加入不能仅使用外键。如果我使用的是主键,它可以工作,但我必须根据外键来做
-
谁知道“不工作”是什么意思。也许如果你真的用事实更新你的问题
-
请注意您说的是“SELECT c FROM client_software_param_mapping c...”,其中 c 是“client_software_param_mapping”表的别名。因此,您将只选择具有别名 c 的表。您需要从 c 和 f 中选择列。请看coderanch.com/t/688371/databases/…
标签: java mysql sql hibernate jpa