我的实体Users
包含idUser
,login
和password
,当我想插入新的User
时,我需要检查是否{{ 1}}重复。其实我这样做了:
login
但我认为我可以做得更高效,而且这实际上会抛出NullPointerException
答案 0 :(得分:1)
NullPointerException的原因是,如果您在DB中没有此类登录。那么唯一的结果将返回null
。
要解决此问题,您只需检查结果是否为空
return null != crit.uniqueResult();
答案 1 :(得分:0)
就像Damian所说,你的问题出在uniqueResult()上,它返回null。
无论如何,要做你想做的事,你也可以采取这些方法:
1-如果您的DDBB中的登录列是UNIQUE,您可以尝试插入它并捕获异常,如果该登录存在,将抛出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();
在一般情况下,应该更有效,因为返回的值将是一个整数,而不是必须在内存中构建和保留的完整对象。