Generally, they can as SimpleJpaRepository only applies the where clause if the predicate handed into the method is not null. This is just to be safe if people violate the contract defined in Specification. Does it really make sense to delay the Date parsing that much? Passing data around as Strings is not a good idea in general so why not parse the date upfront and only apply the entire specification if it's a valid date. Otherwise you essentially write
Code:
….findAll(where(receiptDateEquals(yourString)));
and would get *all* data back in case the given String is incorrect. This is not only problematic from a debugging perspective, I'd argue it's just not what you defined you want to get back, because if the date is invalid there are essentially *no* results with that "date". This leads to the more abstract questions how to deal with null specifications and the predicates generated in turn. I don't think that transparently dropping them is an appropriate approach as your sample above shows.
PS: You might wanna use [ code ] tags when posting larger snippets of code as otherwise the stuff is very hard to read.