Java 如何知道是否使用Hibernate重复登录?
我拥有具有Java 如何知道是否使用Hibernate重复登录?,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,我拥有具有idUser、login和password的实体Users,当我想插入一个新的User时,我需要检查login是否重复。实际上,我正在这样做: public boolean existsLogin(final String login) { Criteria crit = this.sessionFactory.getCurrentSession().createCriteria( User.class); crit.ad
idUser
、login
和password
的实体Users
,当我想插入一个新的User
时,我需要检查login
是否重复。实际上,我正在这样做:
public boolean existsLogin(final String login) {
Criteria crit = this.sessionFactory.getCurrentSession().createCriteria(
User.class);
crit.add(Restrictions.eq("login", login));
User user = (User) crit.uniqueResult();
return user.getLogin() == null;
}
但是我认为我可以做得更有效,这实际上抛出了NullPointerExceptionNullPointerException的原因是,如果您在DB中没有这样的登录名。然后唯一结果将返回
null
要解决这个问题,您只需检查结果是否为非空
返回空值!=crit.uniqueResult()代码>正如Damian所说,问题出在返回null的uniqueResult()上
无论如何,要做你想做的事,你也可以采取以下方法:
1-如果登录列在DDBB中是唯一的,您可以尝试插入它并捕获异常,如果该登录存在,将抛出DDBB
异常将是SQLException,SQLException.getSQLState()将为您提供一个代码:“23000”将表示至少在MySQL、PostgreSQL和Oracle中存在唯一的约束冲突
2-您还可以制作一个简单的HQL/SQL选择并执行它:
session.createSQLQuery("select count(1) as cnt from my_table where login=:login")
.setParameter("login", login).uniqueResult();
在一般情况下,这应该更有效,因为返回的值将是一个整数,而不是必须在内存中构建和保存的完整对象