如何根据唯一列选择行。 在我的表中,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;
}
答案 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;
}
希望这会有所帮助:)