woensdag 29 januari 2025

Easy pagination with Spring JPA - Hibernate

*****************************
File Main
*****************************
for (theUser in userService.getUsersByClassification("Class 1", pageNr = 0, pageSize = 10)) {
	println(theUser.displayName)
}


*****************************
File UserService
*****************************
@Service
class UserService @Autowired constructor(private val userPaging: UserPagingAndSortingRepository) {
    fun getUsersByClassification(classification: String, pageNr: Int, pageSize: Int): Page<User> {
        val pageable: Pageable = PageRequest.of(pageNr, pageSize)
        return userPaging.findByClassification(classificatie, pageable)
    }
}


*****************************
File UserPagingAndSortingRepository
The Query annotation is JPQL, but in the case of JPA Hibernate, can also be HQL.
*****************************
interface UserPagingAndSortingRepository : PagingAndSortingRepository<User, Long> {
    @Query("SELECT u FROM User u JOIN u.userExtradata um WHERE um.classification = :classification")
    fun findByClassification(@Param("classification") classification: String, pageable: Pageable): Page<User>
}


*****************************
File entity.User
*****************************
@Entity
@Table(name = "\"user\"")
class User {
    @Id
    var id: Long = 0;

    @Column (name="display_name")
    var displayName: String = ""

    @OneToOne(mappedBy = "user", cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
    val userExtradata: UserExtradata? = null
}


*****************************
File entity.UserExtradata
*****************************
@Entity
@Table(name = "\"user_extradata\"")
class UserExtradata {
    @Id
    var user_id: Long = 0;
    var classification: String = ""
    var phonenumber: String? = ""

    @OneToOne
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    val user: User? = null
}

Geen opmerkingen:

Een reactie posten