有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPA条件从另一个查询中选择

我正在尝试从另一个查询中选择信息,如:

SELECT user.user_id, product.first_time
FROM USER AS user
INNER JOIN (SELECT min(product.first_time) as first_time,
                   product.user_id
            FROM PRODUCT AS product
            GROUP BY (product.user_id)
           ) product
ON user.user_id = product.user_id

但是我不知道如何创建一个条件查询来执行它。 我可以用标准API执行它吗


共 (1) 个答案

  1. # 1 楼答案

    尝试使用以下方法: https://docs.jboss.org/hibernate/orm/4.3/topical/html/metamodelgen/MetamodelGenerator.html

    需要为您的实体创建元类

    例如,您的服务类别:

    @Service("jpaCustomerService")
    @Repository
    @Transactional
    
    public class CustomerServiceImpl implements CustomerService {
        @PersistenceContext
        private EntityManager em;
    
    @Transactional(readOnly = true)
        public List<CustomersEntity> findByCriteriaQuery(String name){
            CriteriaBuilder cb = em.getCriteriaBuilder();
            javax.persistence.criteria.CriteriaQuery<CustomersEntity> criteriaQuery = cb.createQuery(CustomersEntity.class);
            Root<CustomersEntity> customersEntityRoot = criteriaQuery.from(CustomersEntity.class);
            customersEntityRoot.fetch(CustomersEntity_.animal, JoinType.LEFT);
            criteriaQuery.select(customersEntityRoot).distinct(true);
            Predicate criteria = cb.conjunction();
            if (!name.isEmpty()){
                Predicate p = cb.equal(customersEntityRoot.get(CustomersEntity_.name), name);
            criteria = cb.and(criteria, p);
            }
            criteriaQuery.where(criteria);
            List<CustomersEntity> result = em.createQuery(criteriaQuery).getResultList();
            return result;
        }
    }
    

    以及您的控制器或主控制器:

    public static void criteriaExample(GenericXmlApplicationContext ctx){
            CustomerService service = ctx.getBean("jpaCustomerService", CustomerService.class);
            List<CustomersEntity> creteriaResult = service.findByCriteriaQuery("NCI-3");
            for (CustomersEntity customer : creteriaResult){
                System.out.println(customer);
                if (!customer.getAnimal().isEmpty())
                for (AnimalsEntity animal : customer.getAnimal()){
                    System.out.println(animal);
                }
            }
        }
    

    CustomersEntity-元模型类。不需要SQL查询

    您的infs是:

    public interface CustomerService {
    List<CustomersEntity> findByCriteriaQuery(String name);}