0

我有一张桌子 | 客户 ID | 客户姓名 | 客户国家|。

如何编写 HQL 查询来检索与 CustomerName 和 CustomerCountry 的组合对应的 CustomerId?

这是我的 CustomerDaoImpl:

@Repository
public class CustomerDaoImpl implements CustomerDao {

@Autowired(required=true)
private SessionFactory sessionFactory;

public Customer getCTID(String customerName, String customerCountry) {
    return (Customer) 
this.sessionFactory.getCurrentSession().createQuery(/* Some query that gets CTID corresponding to customerName and customerCountry*/);

}
}

我想使用这个 CustomerId 并将其插入到我的 DeliveryTable 中以进行新的交付。我将 DTO 用于输入交付信息的表单,并且我将使用 DeliveryService 创建新交付,该交付使用 CustomerService 通过 CusomerDAO 检索 CustomerId。

谢谢你的帮助,D

4

2 回答 2

0

据我了解,与 Customer:Delivery 存在 1:N 关系。如果您使用多对一映射而不是直接使用 ID,这将是有益的。

如果您仍然想要 HQL,您可以使用

this.sessionFactory.getCurrentSession().createQuery(
    "from Customer customer where customer.customerName = :name "
    + " and customer.customerCountry = :country").setParameter("name",customerName).setParameter("country",countryName).uniqueResult();

uniqueResult因为我假设 customerName + Country 在数据库中是唯一的。如果不是,您需要使用.setMaxResult(1),否则从 aList到的映射Customer会出错。

于 2012-04-18T14:45:37.190 回答
0

这是 Nitin 使用命名参数的答案,正如 JB Nizet 指出的那样:

Long id = this.sessionFactory.getCurrentSession().createQuery(
   "select customerId from Customer where customerName = :name and customerCountry = :country")
   .setParameter("name", customerName).setParameter("country", customerCountry).uniqueResult();
于 2012-04-18T19:56:15.727 回答