如何从 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;

  }

}      


慕森卡
浏览 129回答 1
1回答

桃花长相依

这是正确的查询,因为它返回该 ClientId 处存在的第三个 pojo 的对象,因此它能够理解 ClientId 的类型。JPQL 从不使用表名和列名。它总是使用实体名称及其映射的字段/属性名称。所以在这里我采用了第三个 pojo 的对象,该对象具有 ClientId 字段。从 client_file_configuration c,client_software_param_mapping p 中选择 c,p 其中 c.clientSoftwareConfiguration = p.clientSoftwareConfiguration
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java