2016-03-15 4 views
3

У меня есть два объекта, как A и B такие, что:параметра не связывание найдено имени (Spring JPA данные)

class B { 
    private Integer id; 
    private String field1; 
    private String field2; 
    // getters and setters 
} 

class A { 
    private Date date; 
    //one to one mapping is there between A and B 
    private B b; 
    //getters and setters 
} 

У меня есть хранилище весны данных таким образом, что:

@Query("from A a where a.date= :date and a.b.id =:#{#b.id}") 
     A findByBAndDate(@Param(value = "date") Date date,@Param(value = "b") B b); 

Но я я получаю исключение, no parameter binding found for name b!.

Однако, если изменить приведенный выше запрос, как:

@Query("from A a where a.b.id =:#{#b.id}") 
A findByB(@Param(value = "b") B b); 

все работает отлично. В чем проблема.

ответ

0

Это неправильно:

В findByBAndDate (@param (значение = "Дата") Дата, @param (значение = "б") B B)

дата является параметром, так получая как @Param (value = "date"), но b не является параметром, это объект, поэтому получите это как @ModelAttribute ("b") B b или все зависит от вашего требования.

+1

Это работает отлично с @Query ("из А где Абид =: # {# b.id} ") FindByB (@Param (значение =" b ") B b); как пружина обеспечивает поддержку SPEL для данных весны. Пожалуйста, перейдите к вопросу. – user1157635

11

Похоже, что мы должны использовать SPeL для всех параметров в запросе, а не для смешивания jpa-путей и SPEL: :date, смешанного с :#{#b.id}.

Попробуйте это, я не проверял, не знаю, как он будет вести себя с Date:

@Query("from A a where a.date= :#{#date} and a.b.id =:#{#b.id}") 
     A findByBAndDate(@Param(value = "date") Date date,@Param(value = "b") B b);