Как получить все строки правильно в Java? - PullRequest
0 голосов
/ 08 июля 2019

Возникла проблема, когда я пытаюсь извлечь свои данные из базы данных, и единственные данные, которые я получаю, - это один объект, который является моей первой строкой.Я хочу, чтобы все мои 3 строки отображались в виде списка, а не только одна строка.есть ли обходной путь с моим кодом ниже?Спасибо за вашу помощь.

Вот что я сделал:

    @RequestMapping(value = "jobs", method = RequestMethod.GET)
public @ResponseBody
List<ArrayList<ArrayList<String>>> getSalary(@RequestParam(value = "autocomplete") String autocompleteValue) {

    List<AutoComplete> list = autoCompleteService.retrieveSalary(autocompleteValue);
    return Arrays.asList(merge(list));

}


ArrayList<ArrayList<String>> merge(List<AutoComplete> list){

    ArrayList<ArrayList<String> > finalList = new ArrayList<ArrayList<String>>(3);
    ArrayList<String> annual = new ArrayList<>();
    ArrayList<String> biweekly = new ArrayList<>();
    ArrayList<String> hourly = new ArrayList<>();

    for (int i = 0; i < list.size(); i++) {
        AutoComplete autoComplete = list.get(i);
        if (autoComplete.getAnnual() != null) {
            annual.add(autoComplete.getAnnual());
        }
        if (autoComplete.getBiweekly() != null) {
            biweekly.add(autoComplete.getBiweekly());
        }
        if (autoComplete.getHourly() != null) {
            hourly.add(autoComplete.getHourly());
        }
    }
    finalList.add(annual);
    finalList.add(biweekly);
    finalList.add(hourly);
    return finalList;

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Вы уверены, что критерии findAllByJobClassCdIsContaining(jobClassCd) возвращают все 3 записи? Некоторые, где я чувствую, что это ваш пользовательский метод, а не оригинал, предоставленный репозиторием JPA. Попробуйте использовать findAllByJobClassCdContaining(jobClassCd) или просто findAll(), чтобы посмотреть, вернет ли оно более 1 записи.

ОБНОВЛЕНИЕ - я предположил, что это база данных, которая не возвращает правильное значение, но после вашего комментария я понял, в чем именно проблема. Пожалуйста, попробуйте изменить ваш код, как показано ниже. Для этого вам может понадобиться определить 3 новых массива и родительский список. Затем повторите список, полученный из базы данных, чтобы сформировать окончательный список.

ArrayList<ArrayList<String> > finalList = new ArrayList<ArrayList<String>>(3); 
ArrayList<String> annual = new ArrayList<>();
ArrayList<String> biweekly = new ArrayList<>();
ArrayList<String> hourly = new ArrayList<>();

for (int i = 0; i < list.size(); i++) {
AutoComplete autoComplete = list.get(i);
if (autoComplete.getAnnual() != null) {
      annual.add(autoComplete.getAnnual());
}
if (autoComplete.getBiweekly() != null) {
     biweekly.add(autoComplete.getBiweekly());
}
if (autoComplete.getHourly() != null) {
    hourly.add(autoComplete.getHourly());
}
}
finalList.add(annual);
finalList.add(biweekly);
finalList.add(hourly);
return finalList;
0 голосов
/ 08 июля 2019
Modifiy your model class like below

public class AutoComplete {

ArrayList<String> Annual ;
ArrayList<String> Biweekly ;
ArrayList<String> Hourly;

 public ArrayList<String>getHourly() {
        return Hourly;
    }

    public void setHourly(ArrayList<String> hourly) {
        Hourly = hourly;
    }

    public ArrayList<String> getBiweekly() {
        return Biweekly;
    }

    public void setBiweekly(ArrayList<String> biweekly) {
        Biweekly = biweekly;
    }

    public ArrayList<String> getAnnual() {
        return Annual;
    }

    public void setAnnual(ArrayList<String> annual) {
        Annual = annual;
    }

}

Now in your autocompleteRepository.findAllByJobClassCdIsContaining(String jobClassCd) Method Store all the rows in arrays and then set array in to model class return on single model object called AutoComplete .

public AutoComplete  findAllByJobClassCdIsContaining(String jobClassCd){

/// Declare arrays
ArrayList<String> Annual = new ArrayList<>();
ArrayList<String> Biweekly = new ArrayList<>();
ArrayList<String> Hourly= new ArrayList<>();

//Retrieve from DB and set into 3 arrays 

   // code 
     While(row.next()){ 
  ///  get from db and set to arrays.
     }


// set arrays to object
AutoComplete  acc=new AutoComplete  ();
acc.setHourly(Hourly);
acc.setsetBiweekly(Biweekly );
acc.setAnnual(Annual);

}

All other method in service and domain layer will be modified accordingly.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...