Hibernate方法检查表中的存在或行但不返回行

时间:2014-07-02 14:16:31

标签: java sql hibernate

我需要实现一个DAO方法来检查表中是否存在行,并相应地返回一个布尔值。显示原始版本:

public boolean check(Integer bookId) {
    logger.info(BookDAOImpl.class.getName() + ".check() method called.");

    return bookId.equals(this.get(bookId).getBookId());
}    

我不需要返回找到的行。

由于这仅适用于演示应用程序,我正在使用:

@Override
public boolean check(Integer bookId) {
    logger.info(PersonDAOImpl.class.getName() + ".check() method called.");

    try {
        Book book = this.get(bookId);
        return bookId.intValue() == book.getBookId().intValue();
    }
    catch(IndexOutOfBoundsException e) {
        return false;
    }
}    

2 个答案:

答案 0 :(得分:0)

只需使用带有bookId的hibernate查询数据库。如果返回任何结果集,则返回true,否则返回false。

答案 1 :(得分:0)

我猜你是想为了表现而优化支票。

让我澄清一下: 获取行有三个步骤:  1.通过网络进行方法调用/请求  2. Oracle扫描并找到匹配的行(有或没有     指数)  3.复制行数据并将其带回

与(1)和(2)相关的成本很高,而(3)的成本很小。 因此,恕我直言,尝试优化返回的数据量没有意义。

例如,如果仅需要120ms进行检查,则获取数据可能只需要125ms。 正常情况下几乎没有5%的差异。

注意:   - 如果WHERE条件使用索引,(2)也会变少    昂贵   - 如果您选择50到数百列,那么找到一种方法就可以了。

建议: 除非您选择50多列,否则不要打扰。只需获取完整数据并检查resultList.size()。