使用HQL从表中检索主键

时间:2012-04-18 14:26:24

标签: java database spring hibernate hql

我有一张桌子是| 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

2 个答案:

答案 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),否则从ListCustomer的映射会出错。

答案 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();