OpenJPA criterionBuilder вложенный выборка свойства объекта

Есть ли способ в OpenJPA получить свойство вложенного объекта через CriteriaBuilder?

Вот небольшой случай.

@Entity
public class X {
       private Object Y;

       // getters, setters...
}

@Entity
public class Y {
       private String Z;

       // getters, setters...
}

Итак, при использовании CriteriaBuilder мы используем X как Root, то есть:

@PersistenceContext
private EntityManager entityManager;

//.....

Root<X> rootObj = criteriaBuilder.from(X.class);
CriteriaQuery<X> select;

String param1 = X.getY().getZ();

// initializing predicate, default value is TRUE
Predicate predicate1 = criteriaBuilder.isNull(null);

// construct search predicate which fails miserably due to IllegalArgumentExecption
if (X != null) {
predicate1 = criteriaBuilder.and(predicate1, criteriaBuilder.equal(rootObj.<String> get("Y.Z"), param1));}

Теперь мое горе -> get ("YZ")

CriteriaBuilder не знает, как получить Z рефлексивно (однако он может и разрешит Y). Есть ли способ получить Z прямо из get ()?

Помимо использования JPQL, я могу придумать еще один метод, который мне очень не нравится: я полагаю, я мог бы раскрыть Z как @Transient в X (чтобы не дать OpenJPA сохранить его как столбец), но это звучит как действительно плохая идея: я по сути сглаживаю граф объекта вручную и добавляю ненужный мусор внутри entity-компонента, не считая времени необходимо выровнять сложный граф или его склонность к ошибкам (это может пойти не так по-разному).

Есть ли способ заставить эту работу работать? Любые идеи приветствуются.

17
задан quantum 18 June 2011 в 15:04
поделиться