Queries using classes as property of Entity using jpaStreamer

108 Views Asked by At

I have a question regarding jpaStreamer

I use jpaStreamer with Quarkus and have a question regarding a query that I would like to build.

I have an entity Member which has another entity as property, say MemberContact which has two String msisdn and emailAddress I would like to use the repository using Member, like "MemberRepository implements PanacheRepository" and in my search code, I would like to access the msisdn, how do I do it as I can't do stream.filter(Member$.msisdn.containsIgnoreCase(request.msisdn));" and I can't do stream.filter(Member$.memberContact.msisdn.containsIgnoreCase(request.msisdn)); because memberContact when generated is of type com.speedment.jpastreamer.field.ReferenceField<Member, MemberContact>


The reproducer asked for

@Entity
@Table(name = "institute")
public class Institute extends PanacheEntity {
    @Column(name = "code") public String code;
    @Column(name = "name") public String name;
    @ManyToOne @JoinColumn(name = "status_id", referencedColumnName = "id") public Status status;

    public static Institute findByCode(final String code) {
        return Institute.find("code", code).firstResult();
    }
}

@Entity
@Table(name = "status")
public class Status extends PanacheEntity {
    @Column(name = "code") public String code;
    @Column(name = "description") public String description;
    @OneToMany(mappedBy = "status") public List<Institute> institutes = new ArrayList<>();

    public static Status findByCode(final String code) {
        return Status.find("code", code).firstResult();
    }
}

@RequestScoped
public class InstituteRepository implements PanacheRepository<Institute> {
    @Inject JPAStreamer jpaStreamer;

    public List<Institute> searchUsers(final SearchInstitutes request) {
        var stream = jpaStreamer.stream(Institute.class);

        if (isNotEmpty(request.code)) {
            stream.filter(Institute$.code.containsIgnoreCase(request.code));
        }

        if (isNotEmpty(request.name)) {
            stream.filter(Institute$.name.containsIgnoreCase(request.name));
        }
        return stream.collect(toList());
    }
}

How do I make a condition if I want for example to search for an Institute whose Status has the code request.code ?

Because Institute$.status.code.containsIgnoreCase(request.code) won't work

Regards, D.

0

There are 0 best solutions below