我正在使用 spring 和 hibernate - mySql 开发一个基于 Web 的应用程序。我有一个限制,即用户名必须是唯一的。那么哪种方式更有效呢?使用 ahibernate criteria
来检查用户是否存在?或者unique
在数据库中定义然后使用try catch?
提前致谢..
我正在使用 spring 和 hibernate - mySql 开发一个基于 Web 的应用程序。我有一个限制,即用户名必须是唯一的。那么哪种方式更有效呢?使用 ahibernate criteria
来检查用户是否存在?或者unique
在数据库中定义然后使用try catch?
提前致谢..
你应该同时使用两者。Hibernate 查询将允许在插入用户之前从功能上检查用户不存在,并返回适当的结果或引发适当的异常。这比依赖一个唯一的约束要好,因为这个约束会导致事务回滚,并带有一个隐藏在异常堆栈中的神秘错误消息。
但是您还应该有一个唯一性约束来保证唯一性,以防两个并发线程同时检查用户不存在,然后同时插入同一个用户。
对于不需要动态组合的简单查询,我会使用 HQL 而不是 Criteria:恕我直言,更具可读性。
只需使用条件并返回 true 或 false:
public boolean clientNameValidation(String clientName) {
Criteria criteriaOfClient = criteria();
criteriaOfClient.add(Restrictions.eq("clientName", clientName));
List<Client> results = (List<Client>) criteriaOfClient.list();
if (results.size() > 0) {
return true;
} else {
return false;
}
}