У меня есть объект, который содержит преобразованный атрибут:
@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'"));
но я предпочитаю избегать этого, еслиэто возможно.