как получить данные из двух таблиц в JPA - PullRequest
0 голосов
/ 30 января 2019

Я не могу получить все записи из двух таблиц, используя приведенный ниже запрос

Я пробовал это, но получаю результат только из одной таблицы.Я хочу, чтобы результаты обеих таблиц, т. Е. 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));
}

first 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;
  }
}      

secondpojo

@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;
  }
}      

thirdpojo

@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;
}

1 Ответ

0 голосов
/ 31 января 2019

это правильный запрос, так как он возвращает объект третьего pojo, присутствующего в этом ClientId, поэтому он может понять тип ClientId.JPQL никогда не использует имена таблиц и столбцов.Он всегда использует имена объектов и их сопоставленные поля / свойства names.so здесь я взял объект третьего pojo с полем ClientId.

выберите c, p из конфигурации client_file_configuration c, client_software_param_mapping p где c.clientSoftwareConfiguration = p.clientSoftwareConfiguration

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...