Spring存储库自定义查询Spel计算始终为空

Spring存储库自定义查询Spel计算始终为空,spring,jpa,spring-data,spring-data-jpa,Spring,Jpa,Spring Data,Spring Data Jpa,每次在我的存储库中调用findByFirstNameContainingOrLastNameContaining函数时,我都会收到以下错误: org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): Property or field 'firstName' cannot be found on null 我的问题错了吗?我对这个错误一无所知 这是我的档案: Person.java package

每次在我的存储库中调用findByFirstNameContainingOrLastNameContaining函数时,我都会收到以下错误:

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): Property or field 'firstName' cannot be found on null
我的问题错了吗?我对这个错误一无所知

这是我的档案:

Person.java

package com.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    long id;

    String firstName;

    String lastName;

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}
PersonRepository.java

package com.repositories;

import com.model.Person;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;

public interface PersonRepository extends CrudRepository<Person, Long> {
    @Query("SELECT p FROM Person p WHERE p.firstName LIKE %:firstName% OR "
            + "p.firstName LIKE %:lastName% OR "
            + "p.lastName LIKE %:lastName% OR "
            + "p.lastName LIKE %:firstName%")
    public List<Person> findByFirstNameContainingOrLastNameContaining(
        @Param(value = "firstName") String firstName, 
        @Param(value = "lastName") String lastName
    );
}
package.com.repositories;
导入com.model.Person;
导入java.util.List;
导入org.springframework.data.jpa.repository.Query;
导入org.springframework.data.repository.crudepository;
导入org.springframework.data.repository.query.Param;
公共接口PersonRepository扩展了Crudepository{
@查询(“从人员p中选择p,其中p.firstName类似%:firstName%或”
+“p.firstName LIKE%:lastName%或”
+“p.lastName LIKE%:lastName%或”
+“p.lastName(如%:firstName%”)
公共列表FindByFirstNameContaining或LastNameContaining(
@Param(value=“firstName”)字符串firstName,
@参数(value=“lastName”)字符串lastName
);
}

将您的%xxx%替换为:{parameter}即可使用

package com.example.repository;

import com.example.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;


public interface EmployeeRepository extends JpaRepository<Employee, Long> {

@Query("SELECT e FROM Employee e WHERE e.firstName LIKE :firstName OR "
    + "e.firstName LIKE :lastName OR "
    + "e.lastName LIKE :lastName OR "
    + "e.lastName LIKE :firstName")
List<Employee> findByFirstNameContainingOrLastNameContaining(
    @Param(value = "firstName") String firstName,
    @Param(value = "lastName") String lastName
);
}
package com.example.repository;
导入com.example.model.Employee;
导入org.springframework.data.jpa.repository.JpaRepository;
导入org.springframework.data.jpa.repository.Query;
导入org.springframework.data.repository.query.Param;
导入java.util.List;
公共接口EmployeeRepository扩展了JpaRepository{
@查询(“从员工e中选择e,其中e.firstName类似:firstName或”
+“例如:lastName或”
+“e.lastName类似于:lastName或”
+“e.lastName如:firstName”)
列出findByFirstNameContainingOrLastNameContaining(
@Param(value=“firstName”)字符串firstName,
@参数(value=“lastName”)字符串lastName
);
}