HQL选择查询

时间:2016-09-09 08:46:37

标签: java hibernate hql dao

如何根据唯一列选择行。 在我的表中,Id是自动生成的。我正在使用电话号码选择我的表架构中唯一的行。

例如:

 Id    Phone      Name
 1     2209897    abc
 2     5436567    def

这里,Id是主键。 电话是独一无二的。

我正在使用手机登录。 我不希望生成一个列表,只需输出一行。

 @Repository
 public class CustomerDetailsDAOImpl implements CustomerDetailsDAO {

@Autowired
SessionFactory sessionFactory;

@Override
@Transactional
public List<CustomerDetails> getCustomer(String customerPhone) {
    Session session = sessionFactory.openSession();

    Query q = session.createQuery("from CustomerDetails where customerPhone =:p");
    q.setParameter("p", customerPhone);

    List<CustomerDetails> customer = q.getResultList();
    session.close();
    return customer;

}

2 个答案:

答案 0 :(得分:0)

请勿使用q.getResultList()代替q.getSingleResult(),因为您的数据库中的电话号码是唯一的,查询将返回CustomerDetails类的单个对象。

public CustomerDetails getCustomer(String customerPhone) {
    Session session = sessionFactory.openSession();

    Query q = session.createQuery("from CustomerDetails where customerPhone =:p");
    CustomerDetails customer=null;
    q.setParameter("p", customerPhone);
    try{
        customer = q.getResultList();
    }catch(NoResultException ex){
    System.out.println(ex.getMessage());

    }finally{
        session.close();
    }

    return customer;

}

注意:如果您的查询未从数据库中检索任何数据,则getSingleResult()将抛出NoResultException异常。 所以你必须从你身边处理这个例外。

您可以使用上面的示例作为参考。我添加了NoResultException异常处理的代码。

答案 1 :(得分:0)

使用getSingleResult()而不是使用getListResult()。这将执行返回单个无类型结果的SELECT查询。因此,只要您希望使用唯一类型检索单个记录,就应该使用getSingleResult()。

 @Repository
 public class CustomerDetailsDAOImpl implements CustomerDetailsDAO {

@Autowired
SessionFactory sessionFactory;

@Override
@Transactional
public List<CustomerDetails> getCustomer(String customerPhone) {
    Session session = sessionFactory.openSession();

    Query q = session.createQuery("from CustomerDetails where customerPhone =:p");
    q.setParameter("p", customerPhone);

    CustomerDetails customer = q.getSingleResult();
    session.close();
    return customer;

}

希望这会有所帮助:)