Я работаю над созданием API с использованием RESTful [Spring boot framework, Hibernate, Java 11]. Здесь я пытаюсь реализовать запрос, чтобы получить всех клиентов, когда указано firstName и / или lastName. Итак,
- Имя и фамилия могут быть указаны вместе.
- Пользователь может указать только имя или фамилию.
I оба эти случая пробовал реализовать в 1 API. Но не получил ожидаемого результата. Это мои классы:
Entity:
@Entity
@Data
@Table(name = "PERSON")
public class PersonEntity {
@Id
@Column(name = "ID")
private Long id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
}
Мой класс репозитория:
import com.customer.data.management.entity.PersonEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PersonRepository extends JpaRepository<PersonEntity, Long> {
@Query("select u from PersonEntity u where u.firstName = ?1 or u.lastName = ?2")
List<PersonEntity> searchByFirstAndOrLastName(String firstName, String lastName);
}
Вот мой интерфейс службы:
import com.ustomer.data.management.entity.PersonEntity;
import com.customer.data.management.exception.BadRequestException;
import com.customer.data.management.exception.NotFoundException;
import java.util.List;
public interface PersonService {
List<PersonEntity> searchByFirstAndOrLastName(String firstName, String lastName);
}
Затем мой класс ServiceImpl:
import com.customer.data.management.entity.PersonEntity;
import com.customer.data.management.exception.BadRequestException;
import com.customer.data.management.exception.NotFoundException;
import com.customer.data.management.repository.PersonRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
@Transactional
public class PersonServiceImpl implements PersonService{
@Autowired
PersonRepository repository;
@Override
public List<PersonEntity> searchByFirstAndOrLastName(String firstName, String lastName) {
List<PersonEntity> customers = repository.searchByFirstAndOrLastName(firstName, lastName);
if(customers.size() > 0) {
return customers;
} else {
return new ArrayList<PersonEntity>();
}
}
}
Мой класс контроллера:
Какие изменения я должен внести в свой запрос в классе репозитория, чтобы добиться этого?