JPA Спецификация фильтрации вложенного объекта - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь получить свойство вложенного объекта, но получаю исключение falseArgument.

AuditTestingPlanSpecification name = new AuditTestingPlanSpecification(new SearchCriteria("auditPlanId.auditPlanEntity", ":",dates));
        Page<AuditTestingPlanMaster> a = auditTestingPlanMasterRepository.findAll(name, ten);

Ниже приведен код,

public class AuditTestingPlanSpecification implements Specification<AuditTestingPlanMaster> {    
private SearchCriteria criteria;

    public AuditTestingPlanSpecification(SearchCriteria searchCriteria) {
        this.criteria = searchCriteria;
    }

    @Override   
    public Predicate toPredicate(Root<AuditTestingPlanMaster> root, CriteriaQuery<?> query, CriteriaBuilder builder) {

        if (root.get(criteria.getKey()).getJavaType() == String.class) {
            return builder.like(root.<String>get(criteria.getKey()), "%" + criteria.getValue().get(0).toString() + "%");
        } else {
            return builder.equal(root.get(criteria.getKey()), criteria.getValue().get(0).toString());
        }

        return null;
    }
}

Класс SearchCriteria.java

public class SearchCriteria {
    public SearchCriteria(String key, String operation, List<Object> value) {
        super();
        this.key = key;
        this.operation = operation;
        this.value = value;
    }
    private String key;
    private String operation;
    private List<Object> value;

    // getters & setters
}

Класс AuditTestingPlanMaster.java

@Entity
@Table(name = "audit_testing_plan_master")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class AuditTestingPlanMaster implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @Column(name = "risk_area_id")
    private Long riskAreaId;

    @Column(name = "expected_revert_date")
    private Instant expectedRevertDate;

    @Column(name = "created_date")
    private Instant createdDate;

    @Column(name = "last_modified_date")
    private Instant lastModifiedDate;

    @JoinColumn(name = "audit_plan_id", referencedColumnName = "id")
    private AuditPlanMaster auditPlanId;

//getters & setters
}

Класс AuditPlanMaster.java

@Entity
@Table(name = "audit_plan_master")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class AuditPlanMaster implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @Column(name = "remarks", length = 255)
    private String remarks;

    @Column(name = "audit_plan_entity", length = 50)
    private String auditPlanEntity;

    @Column(name = "start_date")
    private Instant startDate;

    @Column(name = "end_date")
    private Instant endDate;

    //getters & setters

}

Я хочу получить все объекты AuditTestingPlanMaster, чья строка AuditPlanMaster.auditPlanEntity соответствует предоставленному значению фильтра.

Спасибо за ваше время и помощь заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...