Skip to content

Instantly share code, notes, and snippets.

@Tonel
Created July 26, 2020 13:52
Show Gist options
  • Select an option

  • Save Tonel/008c5bcfafe06bc7b44ba13d7bc6920d to your computer and use it in GitHub Desktop.

Select an option

Save Tonel/008c5bcfafe06bc7b44ba13d7bc6920d to your computer and use it in GitHub Desktop.
@Repository
class AuthorDao : EntityDao<Author, Int>() {
override var entity : Class<Author>? = Author::class.java
fun findByName(
name : String
) : List<Author> {
val criteriaBuilder = getCriteriaBuilder()
val criteriaQuery = getCriteriaQuery()
val root = criteriaQuery.from(entity)
val query =
criteriaQuery
.select(root)
.where(
criteriaBuilder.like(root.get(Author_.name), "%$name%")
)
return getQuery(query).resultList
}
}
@Repository
abstract class EntityDao<T, KEY : Serializable?> {
@PersistenceContext
protected lateinit var entityManager: EntityManager
protected var entity : Class<T>? = null
fun findByKey(key: KEY): Optional<T> {
return Optional.of(entityManager.find(entity, key))
}
fun findAll(): List<T> {
val criteriaQuery = getCriteriaQuery()
val root = criteriaQuery.from(entity)
val resultQuery = getQuery(criteriaQuery.select(root))
return resultQuery.resultList
}
fun create(entity: T) : T {
entityManager.persist(entity)
return entity
}
fun update(entity: T) : T {
return entityManager.merge(entity)
}
fun delete(entity: T) : T {
entityManager.remove(entity)
return entity
}
protected fun getCriteriaBuilder(): CriteriaBuilder {
return entityManager.criteriaBuilder
}
protected fun getCriteriaQuery(): CriteriaQuery<T> {
return entityManager.criteriaBuilder.createQuery(entity)
}
protected fun getQuery(criteriaQuery : CriteriaQuery<T>): TypedQuery<T> {
return entityManager.createQuery(criteriaQuery)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment