| Feature | Engine | JPA | JDO | Hibernate | OrientDB |
| General Condition | Simple | eq | query.eq(target.getName(),"name") | 1.0.0 | 1.0.0 | 1.0.0 | 1.0.0 | 1.0.0 |
| notEq | query.notEq(target.getName(),"name") |
| gt | query.gt(target.getAge(),20) |
| gtEq | query.gtEq(target.getAge(),20) |
| lt | query.lt(target.getAge(),20) |
| ltEq | query.ltEq(target.getAge(),20) |
| in | query.in(target.getAge(),collection) |
| notIn | query.notIn(target.getAge(),collection) |
| contains | query.contains(target.getAge(),collection) |
| notContains | query.notContains(target.getAge(),collection) |
| like | query.like(target.getAge(),likeStrin) |
| notLike | query.notLike(target.getAge(),likeString) |
| likeNoCase | query.likeNc(target.getAge(),likeString) |
| notLikeNoCase | query.notLikeNc(target.getAge(),likeString) |
| group | AND | query.and() | 1.0.0 | 1.0.0 | 1.0.0 | 1.0.0 | 1.0.0 |
| OR | query.or() |
| Insert | set a value | set | query.set(target.getName(),"the name"); | 2.0.0 | ko | ko | ko | 2.0.0 |
| Update | set a value | set | query.set(target.getName(),"the name"); | 2.0.0 | 2.0.0 | ko | 2.0.0 | 2.0.0 |
| Select | Projection | simple | query.prj(target.getName()) | 1.0.0 | 1.0.0 | 1.0.0 | 1.0.0 | 1.0.0 |
| max | query.prj(target.getName(),ProjectionType.MAX) |
| min | query.prj(target.getName(),ProjectionType.MIN) |
| count | query.prj(target.getName(),ProjectionType.COUNT) |
| avg | query.prj(target.getName(),ProjectionType.AVG) |
| sum | query.prj(target.getName(),ProjectionType.SUM) |
| Order | ASC | query.order(target.getName()) | 1.0.0 | 1.0.0 | 1.0.0 | 1.0.0 | 1.0.0 |
| DESC | query.order(target.getName(),OrderType.DESC) |
| ASC/DESC ProjectionType | query.order(target.getName(),ProjectionType.COUNT,OrderType.ASC) |
| Having Group Operation | max | query.having(target.getAge(),ProjectionType.MAX) | 1.0.0 | 1.0.0 | ko | 1.0.0 | ko |
| min | query.having(target.getAge(),ProjectionType.MIN) |
| count | query.having(target.getAge(),ProjectionType.COUNT) |
| avg | query.having(target.getAge(),ProjectionType.AVG) |
| sum | query.having(target.getAge(),ProjectionType.SUM) |
| Having Condition | eq | query.having(target.getAge(),ProjectionType.MAX).eq(10) | 1.0.0 partial | 1.0.0partial | 1.0.0 partial |
| notEq | query.having(target.getAge(),ProjectionType.MAX).notEq(10) |
| gt | query.having(target.getAge(),ProjectionType.MAX).gt(20) |
| gtEq | query.having(target.getAge(),ProjectionType.MAX).gtEq(20) |
| lt | query.having(target.getAge(),ProjectionType.MAX).lt(20) |
| ltEq | query.having(target.getAge(),ProjectionType.MAX).ltEq(20) |
| in | | ko | ko | ko |
| notIn | |
| contains | |
| notContains | |
| like | |
| notLike | |
| likeNoCase | |
| notLikeNoCase | |
| AND | |
| OR | |
| Join | inner | query.join(Person.class) | 1.5.0 | ko | ko | ko | ko |
| left | query.join(Person.class,JoinType.LEFT) |
| right | query.join(Person.class,JoinType.RIGHT) |
| outer | query.join(Person.class,JoinType.OUTER) |
| inner path | query.join(target.getMom(),Person.class) | 1.5.0 | 1.5.0 |
| left path | query.join(target.getMom(),Person.class,JoinType.LEFT) |
| right path | query.join(target.getMom(),Person.class,JoinType.RIGHT) |
| outer path | query.join(target.getMom(),Person.class,JoinType.OUTER) |
| Can Add Subquery In | projection | query.prj(subquery) | 1.5.0 | ko | ko | 1.5.0 | ko |
| from | | ko | ko | ko |
| condition | query.eq(target.getMom(),subquery) | 1.5.0 | 1.5.0 | 1.5.0 |
| having | query.having(subquery,ProjectType.MAX) | 1.5.0 | ko | ko |
| order | query.order(subquery,OrderType.ASC) | 1.5.0 | ko | ko |
| Can Add to A Subquery | projection | query.prj(subquery) | ko | ko | ko |
| from | | ko | ko | ko |
| condition | query.eq(target.getMom()) | 1.5.0 | 1.5.0 | 1.5.0 |
| having | query.having(target.getAge(),ProjectType.MAX) | 1.5.0 | 1.5.0 | 1.5.0 |
| order | query.order(target.getName(),OrderType.ASC) | 1.5.0 | 1.5.0 | 1.5.0 |