如何才能使用JPA(或Hibernate)API使此查询工作?

时间:2017-05-18 07:36:14

标签: java hibernate jpa

我的代码中有以下方法:

public boolean isFooHere(final Foo foo) {
    final Query query = getCurrentSession().createQuery("SELECT COUNT(*) FROM FooBar WHERE foo_id = " + foo.getId());
    final long count = (Long) query.uniqueResult();
    if (count == 0) {
        return false;
    } else {
        return true;
    }
}

但我认为拥有硬编码的SQL查询并不是一种好习惯。

如何仅使用JPA API获得相同的功能?

3 个答案:

答案 0 :(得分:2)

像这样的东西。在查询和实体字段中使用类而不是表名而不是列

Query query = getCurrentSession().createQuery(
        "select count(*) from Foo f where f.id=:id");
query.setLong("id", foo.getId());
Long count = (Long)query.uniqueResult();

答案 1 :(得分:1)

您可以使用Hibernate Criteria Library

For Instance;

{{1}}

请注意,在“foo.id”中,foo是您的数据库表名。

答案 2 :(得分:0)

我就这样做了:

public boolean isFooHere(final Foo foo) {
    final Criteria criteria = getCurrentSession().createCriteria(FooBar.class);
    criteria.add(Restrictions.eq("foo", foo));
    criteria.setProjection(Projections.rowCount());
    final Long result = (Long) criteria.uniqueResult();
    return result > 0;
}