API критериев JPA - приведение базового типа? - PullRequest
0 голосов
/ 23 декабря 2011

Я не могу найти выход из этого.По сути, у меня есть что-то вроде:

@Embeddable
public class EmbeddedBase
{
...
}

@Embeddable
public class EmbeddedA extends EmbeddedBase
{
private String name;

getName()...
}

@Entity
public class MyEntity
{
private Map<String, EmbeddedBase> embeddeds = new ..;

getEmbeddeds()..
}

// Populate
MyEntity entity = new MyEntity();
entity.getEmbeddeds().put(EmbeddedA.class.getName(), new EmbeddedA());
...

// Try to query using join
From<MyEntity> from = criteria.from(MyEntity.class);
MapJoin<?,?,?> join = from.joinMap("embeddeds");
Path<?> pathToEmbeddedAName = join.value().get("name") <-- fails with attribute "name" not found

Это в некоторой степени имеет смысл, потому что базовый тип join.value () здесь - это «EmbeddedBase», а не «EmbeddedA».Тем не менее, я действительно знаю и могу убедиться, что базовый тип в моем случае - «EmbeddedA» (или любой другой потомок, но я точно знаю тип).Я делаю это потому, что добавляю отдельный предикат фильтра для проверки ключа карты, который содержит имя класса в виде строки, поэтому я выбираю правильную запись на карте.

Ведь янужно что-то вроде join.value (). castUnderylingJavaTypeTo (EmbeddedA.class)?Поскольку odb правильно сохраняет и извлекает поля, я просто не могу получить к нему доступ с использованием критериев api. Я также не могу использовать метамодель, потому что она недоступна для меня в этот момент ... так что я делаю неправильно?Кажется, я не могу найти простой выход отсюда?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...