use of io.crnk.jpa.query.JpaQuery in project crnk-framework by crnk-project.
the class DtoMappingTest method setupModule.
@Override
protected void setupModule(JpaModule module, boolean server) {
super.setupModule(module, server);
if (server) {
EntityManager entityManager = module.getEntityManager();
QuerydslExpressionFactory<QTestEntity> basicComputedValueFactory = new QuerydslExpressionFactory<QTestEntity>() {
@Override
public Expression<String> getExpression(QTestEntity parent, JPAQuery<?> jpaQuery) {
return parent.stringValue.upper();
}
};
QuerydslExpressionFactory<QTestEntity> complexComputedValueFactory = new QuerydslExpressionFactory<QTestEntity>() {
@Override
public Expression<Long> getExpression(QTestEntity parent, JPAQuery<?> jpaQuery) {
QTestEntity root = QTestEntity.testEntity;
QTestEntity sub = new QTestEntity("subquery");
return JPAExpressions.select(sub.id.count()).from(sub).where(sub.id.lt(root.id));
}
};
QuerydslQueryFactory queryFactory = (QuerydslQueryFactory) module.getQueryFactory();
queryFactory.registerComputedAttribute(TestEntity.class, TestDTO.ATTR_COMPUTED_UPPER_STRING_VALUE, String.class, basicComputedValueFactory);
queryFactory.registerComputedAttribute(TestEntity.class, TestDTO.ATTR_COMPUTED_NUMBER_OF_SMALLER_IDS, Long.class, complexComputedValueFactory);
module.addRepository(JpaRepositoryConfig.builder(TestEntity.class, TestDTO.class, new TestDTOMapper(entityManager)).build());
module.addRepository(JpaRepositoryConfig.builder(RelatedEntity.class, RelatedDTO.class, new RelatedDTOMapper(entityManager)).build());
module.addFilter(new JpaRepositoryFilterBase() {
@Override
public <T> JpaQuery<T> filterQuery(Object repository, QuerySpec querySpec, JpaQuery<T> query) {
query.setDistinct(true);
return query;
}
});
}
}
Aggregations