RentalItemJpaRepository.java

package io.extact.rms.application.persistence.jpa;

import io.extact.rms.application.domain.RentalItem;
import io.extact.rms.application.persistence.GenericRepository.ApiType;
import io.extact.rms.application.persistence.RentalItemRepository;
import io.extact.rms.platform.extension.EnabledIfRuntimeConfig;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.persistence.EntityManager;
import jakarta.persistence.NoResultException;
import jakarta.persistence.PersistenceContext;

@ApplicationScoped
@EnabledIfRuntimeConfig(propertyName = ApiType.PROP_NAME, value = ApiType.JPA)
public class RentalItemJpaRepository extends JpaCrudRepository<RentalItem> implements RentalItemRepository {

    @PersistenceContext
    private EntityManager em;

    @Override
    public RentalItem findBySerialNo(String serialNo) {
        var jpql = "select r from RentalItem r where r.serialNo = ?1";
        try {
            return em.createQuery(jpql, RentalItem.class)
                        .setParameter(1, serialNo)
                        .getSingleResult();
        } catch (NoResultException e) {
            return null;
        }
    }

    @Override
    public EntityManager getEntityManage() {
        return this.em;
    }

    @Override
    public Class<RentalItem> getTargetClass() {
        return RentalItem.class;
    }
}