Как ссылаться на внутреннее перечисление в JPA CriteriaBuilder - PullRequest
0 голосов
/ 19 октября 2018

У меня есть Enum внутри класса, который хранит значение своей сущности в базе данных, и я хочу обратиться к этому столбцу для выполнения запроса.Вот сущности:

public class PostBox{
    private Message message;

    @ManyToOne
    @JoinColumn(name = "MESSAGE_ID")
    public Message getMessage() {
        return message;
    }

    public void setMessage(Message message) {
        this.message = message;
    }
}

public class Message{

    private Answer answer;

    @Column(name = "ANSWER")
    @Enumerated(EnumType.STRING)
    public Answer getAnswer() {
        return answer;
    }

    @AllArgsConstructor
    public static enum Answer{
        MAYBE_YES,
        MAYBE_NO,
        MAYBE_I_DONT_KNOW

        @Getter
        private final String label;
    }
}

Что я хочу достичь на простом английском языке: Select * from POSTBOX where MESSAGE IN (SELECT * from MESSAGE where ANSWER = MAYBE_NO)

Вот то, с чем я пришел

@Override
public final Specification<PostBox> byFilter(final PostBoxFilter filter) {
    return new Specification<PostBox>() {  
        @Override    
        public Predicate toPredicate(Root<PostBox> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
            return builder.equal(root.join(PostBox_.message).get(Message_.answer), filter.getAnswer());
        }
    };
}

Но это дает error : no suitable method found for get(SingularAttribute<Message,Answer>)

Как получить доступ к этой переменной?

...