Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 具有内部联接的HQL查询和空值检查失败_Spring_Hibernate_Hql - Fatal编程技术网

Spring 具有内部联接的HQL查询和空值检查失败

Spring 具有内部联接的HQL查询和空值检查失败,spring,hibernate,hql,Spring,Hibernate,Hql,我需要选择所有客户记录,这些记录链接的租赁实体的字段return\u date为空。以下SQL查询工作正常: SELECT c.customer_id, r.rental_id FROM Customer c INNER JOIN rental as r ON (c.customer_id = r.customer_id) WHERE r.return_date IS NULL; 以下HQL不起作用的原因: Query query

我需要选择所有客户记录,这些记录链接的租赁实体的字段
return\u date
为空。以下SQL查询工作正常:

 SELECT
     c.customer_id, r.rental_id
     FROM
     Customer c
     INNER JOIN rental as r
     ON (c.customer_id = r.customer_id)
     WHERE r.return_date IS NULL;
以下HQL不起作用的原因:

Query query = session.createQuery("from Customer customer " +
                        "inner join customer.rentals as r " +
                        "where r.return_date is null");
背景:

@Override
    public List<Customer> getFilteredCustomers(String filter) {
        Session session = null;
        List<Customer> customers = new ArrayList<>();
            try {
                session = sessionFactory.openSession();
                Query query = session.createQuery("select customer from Customer customer " +
                        "join customer.rentals r " +
                        "where r.return_date is null");
                customers = (List<Customer>)query.list(); // << BREAKPOINT A
            }catch (Exception e){
                System.out.println(e);
            }finally {
                if (session!=null) session.close();
            }
        return customers;
    }

您的查询不起作用,因为您试图将客户与集合(租赁)链接,但要在归还日访问,您必须指向集合的i-esime元素,这样您就可以从
RENTAL
对象开始反向查询(我希望您已经映射了它)

试试这个:

Query query = session.createQuery("select c " +
           " from Rental r, Customer c " +
           " where r.customer_id = c.customer_id " +
           " and r.return_date is null");

您的查询不起作用,因为您试图将客户与集合(租赁)链接,但要在归还日访问,您必须指向集合的i-esime元素,这样您就可以从
RENTAL
对象开始反向查询(我希望您已经映射了它)

试试这个:

Query query = session.createQuery("select c " +
           " from Rental r, Customer c " +
           " where r.customer_id = c.customer_id " +
           " and r.return_date is null");

第一个不适用,第二个不工作。请发布第二个查询的错误?第一个,为什么不适用?但是你有租赁对象吗?第一个不适用,第二个不起作用。请发布第二个查询的错误?第一,为什么不适用?但是你有租赁对象吗?在添加了你的上下文后,我更新了我的答案。试着告诉我是否可以。如果没有,请发布错误。我在添加上下文后更新了我的答案。试着告诉我是否可以。如果没有,请发布错误