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