How to limit query results (#5616)

* JPA/Hibernate
* Spring Data JPA

BAEL-2208
This commit is contained in:
Trevor Gowing
2018-11-07 19:12:00 +02:00
committed by maibin
parent 78dd662f70
commit edbc683094
5 changed files with 187 additions and 0 deletions
@@ -0,0 +1,8 @@
package com.baeldung.limit;
import java.util.List;
interface CustomPassengerRepository {
List<Passenger> findOrderedBySeatNumberLimitedTo(int limit);
}
@@ -0,0 +1,82 @@
package com.baeldung.limit;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Objects;
@Entity
class Passenger {
@Id
@GeneratedValue
@Column(nullable = false)
private Long id;
@Basic(optional = false)
@Column(nullable = false)
private String fistName;
@Basic(optional = false)
@Column(nullable = false)
private String lastName;
@Basic(optional = false)
@Column(nullable = false)
private int seatNumber;
private Passenger(String fistName, String lastName, int seatNumber) {
this.fistName = fistName;
this.lastName = lastName;
this.seatNumber = seatNumber;
}
static Passenger from(String firstName, String lastName, int seatNumber) {
return new Passenger(firstName, lastName, seatNumber);
}
@Override
public boolean equals(Object object) {
if (this == object)
return true;
if (object == null || getClass() != object.getClass())
return false;
Passenger passenger = (Passenger) object;
return getSeatNumber() == passenger.getSeatNumber() && Objects.equals(getFistName(), passenger.getFistName())
&& Objects.equals(getLastName(), passenger.getLastName());
}
@Override
public int hashCode() {
return Objects.hash(getFistName(), getLastName(), getSeatNumber());
}
@Override
public String toString() {
final StringBuilder toStringBuilder = new StringBuilder(getClass().getSimpleName());
toStringBuilder.append("{ id=").append(id);
toStringBuilder.append(", fistName='").append(fistName).append('\'');
toStringBuilder.append(", lastName='").append(lastName).append('\'');
toStringBuilder.append(", seatNumber=").append(seatNumber);
toStringBuilder.append('}');
return toStringBuilder.toString();
}
Long getId() {
return id;
}
String getFistName() {
return fistName;
}
String getLastName() {
return lastName;
}
int getSeatNumber() {
return seatNumber;
}
}
@@ -0,0 +1,8 @@
package com.baeldung.limit;
import org.springframework.data.jpa.repository.JpaRepository;
interface PassengerRepository extends JpaRepository<Passenger, Long>, CustomPassengerRepository {
Passenger findFirstByOrderBySeatNumberAsc();
}
@@ -0,0 +1,20 @@
package com.baeldung.limit;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
@Repository
class PassengerRepositoryImpl implements CustomPassengerRepository {
@PersistenceContext
private EntityManager entityManager;
@Override
public List<Passenger> findOrderedBySeatNumberLimitedTo(int limit) {
return entityManager.createQuery("SELECT p FROM Passenger p ORDER BY p.seatNumber",
Passenger.class).setMaxResults(limit).getResultList();
}
}