JPA Query работает только родной - PullRequest
0 голосов
/ 08 октября 2019

Вот мой репозиторий:

public interface MachineRepository extends JpaRepository<Machine, Integer> {

    @Query(value="select m.name FROM Machine m", nativeQuery = true)
    Set<SomeName> getAllMachineTypes();
}

Интерфейс:

public interface SomeName {
    String getName();
}

Модель:

@Data
@Entity
@Table(name="Machine")
public class Machine {

    @Id
    @Column(name = "id")
    @GeneratedValue
    private Integer id;

    @Column(name = "name")
    private String name;
}

Сервис:

@Service
public class MachineService {

    @Autowired
    MachineRepository machineRepository;

    public Set<SomeName> getAllMachines(){
        return machineRepository.getAllMachines();
    }

Контроллер:

    @Autowired
    MachineService machineService;
    @RequestMapping("/")
        public String findMachines(){
            Set<SomeName> machines = machineService.getAllMachines();
            for (SomeName mch: machines
                 ) {
                System.out.println(mch.getName());
            }

            //...
        }

Когда я запускаю как есть, он выводит имя на консоль. Но когда я изменяю nativeQuery на false (или удаляю его, потому что по умолчанию это false):

public interface MachineRepository extends JpaRepository<Machine, Integer> {

    @Query(value="select m.name FROM Machine m", nativeQuery = false)
    Set<SomeName> getAllMachineTypes();
}

Тогда я не получаю никакого вывода. Поскольку я не хочу использовать nativeQuery, я хотел бы спросить, как заставить его работать без него.

1 Ответ

1 голос
/ 08 октября 2019

Используйте это:

public interface MachineRepository extends JpaRepository<Machine, Integer> {

    @Query(value="select m.name FROM Machine m")
    List<String> getAllMachineTypes();
}

, потому что m.name является строкой.

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