Spring Data JPA: Specification with "like" and Long
hibernate, java, jpa, spring, spring-data
Solution
That's because `kundenNr`in your entity class is a `Long`, and `%4%` doesn't parse as long.
In SQL, the % sign in the query is only appliable to varchar (and some variants), so it's not possible to use it on a long field, which probably is translated to a numeric field in the database.
Problem
I have the following problem. I used spring-data and i want to create a "like" statement for a Long Property. I have tried the following, but without success. ``` private Specification<T> createSpecification() { return new Specification<T>() { @Override public Predicate toPredicate(final Root<T> root, final CriteriaQuery<?> query, final CriteriaBuilder cb) { final Predicate like = query.where(cb.like(root.<String> get("kundenNr"), "%4%")).getRestriction(); return like; } }; } ``` and domain class ``` public class Kunde implements Serializable { @ColumnYB(lable = "KundenNr.", order = 1) @Id @javax.persistence.Column(nullable = false, name = "kundennr") protected Long kundenNr; @ColumnYB(lable = "Deaktiviert") @Column(nullable = false) private boolean deaktiviert = false; @Column(name = "kundenart") private String kundenart; ... ``` I get the following error. ``` org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [%4%] did not match expected type [java.lang.Long]; nested exception is java.lang.IllegalArgumentException: Parameter value [%4%] did not match expected type [java.lang.Long] at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:384) ~[spring-orm-4.0.1.RELEASE.jar:4.0.1.RELEASE] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:157) ~[spring-orm-4.0.1.RELEASE.jar:4.0.1.RELEASE] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417) ~[spring-orm-4.0.1.RELEASE.jar:4.0.1.RELEASE] at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) ~[spring-tx-4.0.1.RELEASE.jar:4.0.1.RELEASE] at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) ~[spring-tx-4.0.1.RELEASE.jar:4.0.1.RELEASE] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) ~[spring-tx-4.0.1.RELEASE.jar:4.0.1.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.0.1.RELEASE.jar:4.0.1.RELEASE] at org.springframework.data.jpa.repository.support.LockModeRepositoryPostProcessor$LockModePopulatingMethodIntercceptor.invoke(LockModeRepositoryPostProcessor.java:92) ~[spring-data-jpa-1.4.1.RELEASE.jar:na] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.0.1.RELEASE.jar:4.0.1.RELEASE] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.0.1.RELEASE.jar:4.0.1.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.0.1.RELEASE.jar:4.0.1.RELEASE] ``` What am I doing wrong?