我有一张桌子是| CustomerId |客户名称| CustomerCountry |。
如何编写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
答案 0 :(得分:0)
据我所知,与客户有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在DB中是唯一的。如果不是,则需要使用.setMaxResult(1)
,否则从List
到Customer
的映射会出错。
答案 1 :(得分: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();