Добавить два условия в JpaRepository - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь сделать POC - используя JpaRepository отфильтровать данные, добавив два условия.

Я написал код, подобный приведенному ниже

public interface TemplateRepository extends JpaRepository<Template, Long>  {

    List<Template> findByTemplateNameContains(String templateName);//This is Working Fine
    List<Template> findByTemplateNameAndActiveFlagContains(String templateName, String activeFlag);// My POC       
}

templateName столбец - это VARCHAR2, а activeFlag - это Char в базе данных Oracle. Я пытаюсь отфильтровать данные как templatename, так и activeFlag.

Я передаю входной объект в запросе приложения SoapUI (POST).

{ "netting":"karu_test", "activeFlag": "Y" }

но я получаю приведенную ниже ошибку

"Значение параметра [% Y%] не соответствует ожидаемому типу [java.lang.Character (n / a)]; вложенное исключение - java.lang.IllegalArgumentException: значение параметра [% Y%] не соответствует ожидаемому типу [java.lang.Character (n / a)] "

Я понимаю эту ошибку, например, столбец ACTIVE_FLAG равен CHAR(1), поэтому несоответствие типов произошло. Но как добиться той же функциональности?

Более того ... как использовать объединение нескольких таблиц и условия в JpaRepository

Я изменил тип activeFlag на Char все еще яполучить ту же ошибку.

Шаблон класса

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.Date;
import java.util.List;

@Entity
@Table(name="TEMPLATE_DEF")
@Getter
@Setter
public class Template {

    @Column(name="TEMPLATE_ID")
    @Id
    private String nettingTemplateId;
    @Column(name="TEMPLATE_NAME")
    private String templateName;
    @Column(name="LAST_UPDATE")
    private Date lastUpdate;
    @Column(name="UPDATE_USER_ID")
    private Integer updUsrId;
    @Column(name="ACTIVE_FLAG")
    private char activeFlag;
    @Column(name="VERSION")
    private Integer Version;
    @Column(name="CREATION_DATE")
    private Date creationDate;
    @Column(name="CREATE_USER_ID")
    private Integer createUsrId;


}

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Ваш активный флаг является символом, поэтому нет смысла помещать содержимое для activeFlag, а делать точное совпадение, изменить сигнатуру метода на

List<Template> findByTemplateNameContainsAndActiveFlag(String templateName, char activeFlag);// My POC

Я проверил его, он будет совпадать с именем like и activeFlag наего значение

Я не открыл код реализации, однако, когда вы добавляете содержащий ActiveFlag, значение для поиска становится % Y% , что на самом деле трисимвол и не подходит для выполнения, следовательно, ошибка, Я могу ошибаться здесь в моей аналогии.

0 голосов
/ 30 сентября 2019

Пожалуйста, попробуйте ниже JPA Query

List<Template> findByTemplateNameContainingAndActiveFlagContaining(String templateName, Character activeFlag);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...