2015-08-22 5 views
0

Я использую dropwizard jdbi и базы данных PostgreSQL:ошибка при переходе параметра

@Mapper(StudentMapper.class) 
    @SqlQuery("select user_registration.username,user_registration.user_email,user_registration.picname," 
      +"student_specific.subject_name from user_registration inner join " 
      +"student_specific on user_registration.user_email=student_specific" 
      +".student_email where (subject_name @> ARRAY[':subject'])" 
      ) 
    StudentDetails searchStudents(@Bind("subject")String subject); 

моя проблема, когда я даю ARRAY [ «Математика»] это даст результат, но когда я даю ARRAY [ ': субъект «] возвращает меня нулевой, кажется, что это не является обязательным предметом и с„: предмет“как ценность, пожалуйста, помогите мне, как пройти: предмет

ответ

0

Вы должны использовать @ UseStringTemplate3StatementLocator, это аннотаций позволяет использовать <arg> синтаксис в запросах. Пример:

@UseStringTemplate3StatementLocator 
public interface StudentDao { 

     @Mapper(StudentMapper.class) 
     @SqlQuery("select user_registration.username,user_registration.user_email,user_registration.picname," 
       +"student_specific.subject_name from user_registration inner join " 
       +"student_specific on user_registration.user_email=student_specific" 
       +".student_email where (subject_name @> ARRAY[<subject>])" 
       ) 
     StudentDetails searchStudents(@BindIn("subject") List<String> subject); 
} 

Вам может понадобиться добавить явные приведения типов.

ARRAY[<subject>]::text[] 

и избежать ::

ARRAY[<subject>]\\:\\:text[] 

Чтобы использовать StringTemplate добавить эту зависимость в pom.xml

<dependency> 
     <groupId>org.antlr</groupId> 
     <artifactId>stringtemplate</artifactId> 
     <version>3.2.1</version> 
    </dependency> 
Смежные вопросы