Скажем, у меня есть следующие объекты:JPA Запрос на sublclass с SingleTable наследования
@Entity
public class Container
{
@OneToMany
Set<AbstractElement> elements;
//getter setter and other attributes...
}
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "CLASS_CODE", discriminatorType = DiscriminatorType.STRING, length = 10)
public abstract class AbstractElement<T> extends AbstractEntity
{
@Transient
T value;
//getter setter and other attributes...
}
@DiscriminatorValue(value = "BOOL")
@Entity
public class BooleanElement extends AbstractElement<Boolean>
{
/**
* {@inheritDoc}
*/
@Column(name = "VALUE_BOOL")
@Override
public Boolean getValue()
{
return super.getValue();
}
}
Вопрос заключается в следующем:
Как я могу выполнить JPA критерии запроса на значении BooleanElement, начиная с класс КОНТЕЙНЕР?
То, что я на самом деле до сих пор это:
CriteriaQuery<Container> criteriaQuery = criteriaBuilder.createQuery(Container.class);
Root<Container> from = criteriaQuery.from(Container.class);
criteriaQuery.select(from);
from = from.join("elements");
Predicate pred = criteriaBuilder.equal(criteriaBuilder.treat(from ,BooleanElement.class).get("value"), FOO);
//etc......
Исключение в этой точке, что «не существует атрибутов значения на AbstractEntity».
Заранее спасибо.