Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的JavaSpringJPA查询没有返回等价的MySQL查询返回的内容_Java_Spring_Jpa - Fatal编程技术网

我的JavaSpringJPA查询没有返回等价的MySQL查询返回的内容

我的JavaSpringJPA查询没有返回等价的MySQL查询返回的内容,java,spring,jpa,Java,Spring,Jpa,我正在使用JavaSpring作为我正在开发的web服务。有人问我上班有困难 在MySQL Workbench中,此查询工作正常: SELECT * from Employees e WHERE e.personnel_type like 'Full Time' AND e.branch like '%%' AND e.office like '%%' 请注意,分支机构和办公室是空的,没有提供 如果我在MySQL中运行此查询,我会得到所有“全职”员工,而不管是分支机构还是办公室 但是,在我的J

我正在使用JavaSpring作为我正在开发的web服务。有人问我上班有困难

在MySQL Workbench中,此查询工作正常:

SELECT * from Employees e
WHERE e.personnel_type like 'Full Time'
AND e.branch like '%%'
AND e.office like '%%'
请注意,
分支机构
办公室
是空的,没有提供

如果我在MySQL中运行此查询,我会得到所有“全职”员工,而不管是
分支机构
还是
办公室

但是,在我的JPA查询中:

@Repository
public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    @Query("
    FROM Employees e
    WHERE e.personnelType like :personnelType
    AND e.branch like %:branch%
    AND e.officelike %:office%
    ");
    List<Object[]> employeeSearch(
        @Param("personnelType") String personnelType,
        @Param("branch") String branch,
        @Param("office") String office
    );
@存储库
公共接口EmployeeRepository扩展了Crudepository{
@查询(”
来自雇员
其中e.personnelType类似于:personnelType
和e.branch like%:branch%
和e.officelike%:office%
");
列出员工搜索(
@参数(“personnelType”)字符串personnelType,
@参数(“分支”)字符串分支,
@参数(“办公室”)字符串办公室
);
如果我不提供
分支机构
办公室
,我什么也得不到;就像通配符
%%
不起作用一样

但是,如果我提供了
分支机构
办公室
,我会得到我应该得到的记录


我做错了什么?

如果执行以下操作,也可以传递null,它将正常工作

    FROM Employees e
    WHERE e.personnelType like :personnelType
    AND (:branch is null OR e.branch like %:branch%)
    AND (:office is null OR e.officelike %:office%)

首先将您的MySQL查询更改/优化为

从e中选择* 其中e.人员类型=‘全职’

它将返回与您编写的结果相同的结果

  • 如果不使用任何通配符,为什么要像使用通配符一样使用
  • 为什么要像“%”一样使用,如果您不在该列上使用这样的条件,它将“默认”获取所有条件,因为您没有对它们指定任何限制
因此,在将查询更改为

从e中选择* 其中e.人员类型=‘全职’

您的查询将运行得更快,您将能够编写方法而不是编写JPA查询

列表findAllEmployeesByName(字符串名称)


**注:**我还猜测,您的持久性构建得不好,因为对象[]类型为员工实体。我建议您重新考虑这一点。

当您说“不提供”时,分支机构和办公室null或空的值是什么?我猜测您的查询是这样的“e.branch类似于%null%”你是100%正确。我只是仔细检查了我的代码,我发送了一个
null
,而不是一个空
字符串
。谢谢!