![](/img/trans.png)
[英]JPA Hibernate SQL Query to NOT fetch data from one of the associated tables
[英]how to fetch data from two tables in JPA
我无法使用以下查询从两个表中获取所有记录
我试过这个,但我只从一张桌子上得到结果。 我想要两个表的结果,即 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;
}
这是正确的查询,因为它返回存在于该 ClientId 处的第三个 pojo 的对象,因此它能够理解 ClientId.JPQL 的类型,从不使用表名和列名。 它总是使用实体名称及其映射的字段/属性名称。所以在这里我采用了具有 ClientId 字段的第三个 pojo 的对象。
从 client_file_configuration c,client_software_param_mapping p 中选择 c,p 其中 c.clientSoftwareConfiguration = p.clientSoftwareConfiguration
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.