我的代码中有以下方法:
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获得相同的功能?
答案 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)
答案 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;
}