Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何知道是否使用Hibernate重复登录?_Java_Hibernate_Spring Mvc - Fatal编程技术网

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();
在一般情况下,这应该更有效,因为返回的值将是一个整数,而不是必须在内存中构建和保存的完整对象