1

我正在使用 spring 和 hibernate - mySql 开发一个基于 Web 的应用程序。我有一个限制,即用户名必须是唯一的。那么哪种方式更有效呢?使用 ahibernate criteria来检查用户是否存在?或者unique在数据库中定义然后使用try catch?

提前致谢..

4

2 回答 2

3

你应该同时使用两者。Hibernate 查询将允许在插入用户之前从功能上检查用户不存在,并返回适当的结果或引发适当的异常。这比依赖一个唯一的约束要好,因为这个约束会导致事务回滚,并带有一个隐藏在异常堆栈中的神秘错误消息。

但是您还应该有一个唯一性约束来保证唯一性,以防两个并发线程同时检查用户不存在,然后同时插入同一个用户。

对于不需要动态组合的简单查询,我会使用 HQL 而不是 Criteria:恕我直言,更具可读性。

于 2012-07-12T05:51:18.360 回答
0

只需使用条件并返回 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;
        }
    }
于 2012-07-12T12:54:18.280 回答