Files
tp-hibernate-project/hibernate-project/src/main/java/com/humanbooster/dao/ArticleDao.java
2025-05-19 14:44:14 +02:00

75 lines
2.5 KiB
Java

package com.humanbooster.dao;
import com.humanbooster.model.Article;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import java.util.ArrayList;
import java.util.List;
public class ArticleDao extends GenericDaoImpl<Article, Long> {
public ArticleDao(SessionFactory sessionFactory) {
super(sessionFactory, Article.class);
}
public Article findByAuthor(String author) {
try (Session session = sessionFactory.openSession()) {
session.beginTransaction();
Article article = session.createQuery("FROM Article WHERE author = :author", Article.class)
.setParameter("author", author)
.uniqueResult();
session.getTransaction().commit();
return article;
}
}
public Article findByTitle(String title) {
try (Session session = sessionFactory.openSession()) {
session.beginTransaction();
Article article = session.createQuery("FROM Article WHERE title = :title", Article.class)
.setParameter("title", title)
.uniqueResult();
session.getTransaction().commit();
return article;
}
}
public List<Article> findByCriteria(String keyword, Long authorId, int page, int size) {
try (Session session = sessionFactory.openSession()) {
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Article> query = cb.createQuery(Article.class);
Root<Article> root = query.from(Article.class);
query.select(root);
List<Predicate> predicates = new ArrayList<>();
if (keyword != null && !keyword.isEmpty()) {
predicates.add(
cb.like(root.get("title"), "%" + keyword + "%")
);
}
if (authorId != null) {
predicates.add(
cb.equal(root.get("author").get("id"), authorId)
);
}
query.where(predicates.toArray(Predicate[]::new));
query.orderBy(cb.asc(root.get("title")));
return session.createQuery(query)
.setFirstResult(page * size)
.setMaxResults(size)
.getResultList();
}
}
}