카테고리 없음

repository - crud (JPA)

제이G 2024. 4. 20. 12:35

 

Repository

@Repository
@Transactional
public class JpaOrderRepository {

	private final EntityManager em;

	public JpaOrderRepository(EntityManager em) {
		this.em = em;
	}

	public Order save(final Order order) {
		em.persist(order);
		return order;
	}
    
    public Optional<Order> findById(final Long id) {
		Order order = em.find(Order.class, id);
		return Optional.ofNullable(order);
	}
    
    public List<Order> findByName(final String name) {
		String jpql = "SELECT o FROM Order o WHERE o.name = :name";
		return em.createQuery(jpql, Order.class)
				.setParameter("name", name)
				.getResultList();
	}
    
    // offset based pagination
	public List<Order> findAll(final SearchCondition searchCondition) {
		String jpql = "SELECT o FROM Order o ORDER BY o.id";
		return em.createQuery(jpql, Order.class)
				.setFirstResult(searchCondition.offset().intValue())
				.setMaxResults(searchCondition.size())
				.getResultList();
	}
    
    public List<Order> findAllV2() {
		List<Order> resultList = em.createQuery("select o from Order o join o.member m" +
										" where o.status = :status " +
										" and m.name like :name", Order.class)
										.setParameter("status", orderSearch.getOrderStatus())
                                        .setParameter("name", orderSearch.getMemberName())
                                        .setFirstResult(100)  // 페이징: 100부터 시작
                                        .setMaxResults(1000)
                                        .getResultList();
    }
  }