spring-data-jpa
spring-data-jpa copied to clipboard
JpaSort.unsafe throws exception for non-entity properties [DATAJPA-1643]
Milan Milanov opened DATAJPA-1643 and commented
I'm using the spring boot starter JPA version 2.2.1 RELEASE, which pulls the spring data JPA project with the same dependency. I'd like to use the specification + paging findAll method, but with a twist, that the sorting should be done based on a function, and not on a simple property.
Sort sort = JpaSort.unsafe("nlssort(entity_title, 'NLS_SORT = XGERMAN_DIN_AI')");
var activities = entityRepository.findAll(new EntitySpecification(...), PageRequest.of(0, 10, sort))
Running this code I get an exception saying that No property nlssort(entity found for type Entity!
. The same question is asked here, and in fact the accepted answer actually works. The problem is that adding a query doesn't play along with a specification. Just for test i tried:
@Query("SELECT s FROM Entity s")
Page<Entity> findAll(Specification<Entity> spec, Pageable pageable);
Then the query is actually generated and executed, but all results are just sorted, nothing is filtered. Also i don't know how this would work since there are aliases, but nevertheless:
SELECT *
FROM (SELECT ...
entity0_.entity_title AS entity_title6_1_,
...
FROM entities entity0_
ORDER BY nlssort(entity_title, 'NLS_SORT = XGERMAN_DIN_AI') ASC)
WHERE ROWNUM <= ?
Affects: 2.2.3 (Moore SR3)
Hello,
Did you find a workaround for this ? Im also stick with this:
org.springframework.data.mapping.PropertyReferenceException: No property (CASE WHEN consition THEN value END) found for type BatchCollectOperationItem!
Thanks,
We ended up doing something similar to this:
public static Specification<Example> getOrderSpecification() {
return (root, cq, cb) -> {
final Expression<Object> orderCase = cb.selectCase(root.get(Example_.PROCESSING_STATUS))
.when(ExampleStatus.PENDING.name(), 0)
.when(ExampleStatus.ERROR.name(), 1)
// ...
.otherwise(99);
final Order order = cb.asc(orderCase);
cq.orderBy(order);
return null;
};
}
2.7.5 also have this bug
Hello,
The problem is still present in version 2.7.6 Any idea on how to disable the verification or something similar ?
I dont find any workaround, the solution from @incepter dont work when we use it with PostgreSQL DISTINCT
Thanks in advance, Regards, BrandonFL