Add Predicate in CriteriaBuilder to order results by Timestamp date?

Viewed 14

I am trying to query a table where all of my results can be initially ordered by date:

@Entity
class SomeEntity(
    @Id @GeneratedValue
    var id: Long? = null,
    var name: String? = null,
    var createdAt: Timestamp? = null,
)
//SomeEntityCriteria.kt

@Repository
class SomeEntityCriteria {

    @PersistenceContext
    lateinit var entityManager: EntityManager

    fun findFilterPageable(page: Int, size: Int, orderByDate: Boolean): Page<SomeEntity> {
        val cb = entityManager.criteriaBuilder
        val q = cb.createQuery(SomeEntity::class.java)
        val someEntity = q.from(SomeEntity::class.java)

        val predicates: MutableList<Predicate> = mutableListOf()

        val sequence: Path<Set<String>> = someEntity.get(SomeEntity_.ID)

        //Here im suppossed to do something with someEnity.createdAt

        q.select(someEntity).where(
            *predicates.toTypedArray()
        ).orderBy(cb.desc(sequence))

        //CriteriaTool.page does returns PageImpl from a entityManager.createdQuery, so i assume this here is not relevant for the question.
        return CriteriaTool.page(entityManager, q, page, size)
    }

}

Theres not much else to add, i have done some criteria builder queries before but this is the first time im working with dates. Its important to note that i am interested in implementing it in criteria builder cause i want to filter per pages, please refrain from answer with JpaRepository name based methods.

Thanks for the help.

0 Answers
Related