Можно ли задать условие для преобразованного атрибута в запросе критериев? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть объект, который содержит преобразованный атрибут:

@Entity
@Table(name = "MY_TABLE")
public class MyClass {

    @Convert(converter = MyAttributeConverter.class)
    private MyAttribute myAttribute ;

//...
}

Это атрибут:

public class MyAttribute implements Serializable {

    private String attributeA;
    private String attributeB;
    private String attributeC;

    // getters and setters
}

Я опускаю класс преобразователя, потому что это не важно (он просто преобразуетатрибут в json, а затем в строку и наоборот).

Мой вопрос: существует ли способ создать запрос критерия, который извлекает только те объекты MyClass, у которых attributeB равен чему-то?

Я имею в виду что-то вроде этого псевдокода:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
Root<MyClass> root = cq.from(MyClass.class);
cq.where(cb.equal(root.get(MyClass_.MyAttribute.attributeB), "Mordor");

Возможно, я могу использовать подобное условие:

cq.where(cb.like(root.get(MyClass_.MyAttribute), "%attributeB:'Mordor'"));

но я предпочитаю избегать этого, еслиэто возможно.

...