JPA Repository findAll с необязательными полями - PullRequest
0 голосов
/ 02 марта 2019

У меня есть контроллер, который пытается найти с дополнительным полем.Класс сущности JPA определен как:

package demo;

import javax.persistence.*;

@Entity
public class UploadFile {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;

    public UploadFile() {
    }

    public UploadFile(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "UploadFile{" +
               "id=" + id +
               ", name='" + name + '\'' +
               '}';
    }

}

Контроллер определен в следующем коде:

@RequestMapping(value = "/searchFile", method = RequestMethod.GET)
public @ResponseBody
List<UploadFile> searchFile(@RequestParam("id") Optional<Integer> id, @RequestParam("name") Optional<String> name) {
    UploadFile newFile = new UploadFile();
    if (id.isPresent()) {
        newFile.setId(id.get());
    }
    if (name.isPresent()) {
        newFile.setName(name.get());
    }
    System.out.println("new File: " + newFile);

    //uploadFileRepository is a JpaRepository Class
    return List<UploadFile> files = uploadFileRepository.findAll(Example.of(newFile));
}

база данных имеет одну запись

ID      NAME    SIZE    TYPE  
1       index   111     html

, когда'/ searchFile? id = 1' обращается к серверу, консоль печатает:

new File: UploadFile{id=1, name='null'}

пустой массив, возвращаемый http.

Я хочу, чтобы / searchFile? id = 1 возвращал записьс идентификатором 1, а также '/ searchFile? name = index' также возвращает запись с идентификатором 1.

Что-то я не так сделал?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Я думаю, вы не можете использовать example для поиска записей по идентификатору.(Что вполне логично, если вы знаете идентификатор, тогда зачем вам вообще нужна эта функция?)

Так что, если в запросе указан параметр id, используйте findById(id) напрямую, в противном случае заполните все предоставленные свойства примера объекта и используйте метод findAll(Example.of(example)).

0 голосов
/ 02 марта 2019

Я думаю, это из-за этого,

if (name.isPresent()) {
        newFile.setSize(name.get()); 
}

Вы делаете newFile.**setSize**(name.get());, но это должно (я считаю) быть newFile.set**Name**(name.get());

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