【问题标题】:JPA Query works only nativeJPA Query 仅适用于本机
【发布时间】:2019-10-08 10:06:45
【问题描述】:

这是我的存储库:

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,所以想问一下没有它如何使它工作。

【问题讨论】:

  • 如果您将查询更改为以下内容会发生什么:select m FROM Machine m 实际上是 findAll。
  • nativeQuery=false 和 java.sql.SQLSyntaxErrorException 没有输出:nativeQuery=true 的“字段列表”中的未知列“m”
  • m.name 是一个字符串,但您返回一组 SomeName。这行不通。

标签: spring-boot spring-data-jpa


【解决方案1】:

使用这个:

public interface MachineRepository extends JpaRepository<Machine, Integer> {

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

因为m.name 是一个字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2021-01-19
    • 2017-04-11
    • 2018-11-16
    • 2017-02-25
    • 2023-04-05
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多