【发布时间】: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