Mam klase:
public class MyFilter {
public String titleFilter() {
return "%title%";
}
public Long[] idFilter() {
return new Long[] {
1L, 2L
};
}
}
Oraz encję:
@Entity
public class MyEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@NotBlank
@Size(min = 1, max = 96)
@Column(name = "title")
private String title;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
A także repozytorium:
@Repository
public interface MyRepository extends JpaRepository<MyEntity, Long>, JpaSpecificationExecutor<MyEntity> {
@Query("SELECT e FROM mypackage.data.entity.MyEntity e " +
"WHERE e.title LIKE :#{#filter.titleFilter()}"
)
Page<MyEntity> list1(@Param("filter") MyFilter filter, Pageable pageable);
@Query("SELECT e FROM mypackage.data.entity.MyEntity e " +
"WHERE e.title LIKE :#{#filter.titleFilter()} AND e.title LIKE :#{#filter.titleFilter()}"
)
Page<MyEntity> list2(@Param("filter") MyFilter filter, Pageable pageable);
@Query("SELECT e FROM mypackage.data.entity.MyEntity e " +
"WHERE e.id IN :#{#filter.idFilter()}"
)
Page<MyEntity> list3(@Param("filter") MyFilter filter, Pageable pageable);
@Query("SELECT e FROM mypackage.data.entity.MyEntity e " +
"WHERE e.id IN :#{#filter.idFilter()} AND e.id IN :#{#filter.idFilter()}"
)
Page<MyEntity> list4(@Param("filter") MyFilter filter, Pageable pageable);
@Query("SELECT e FROM mypackage.data.entity.MyEntity e " +
"WHERE e.title LIKE :#{#filter.titleFilter()} AND e.id IN :#{#filter.idFilter()}"
)
Page<MyEntity> list5(@Param("filter") MyFilter filter, Pageable pageable);
}
Dlaczego metoda list5 generuje poniższy wyjątek?
org.hibernate.QueryException: unexpected char: '#' [SELECT e FROM mypackage.data.entity.MyEntity e WHERE e.title LIKE :#{#filter.titleFilter()} AND e.id IN :__$synthetic$__2]