我似乎无法找到解决方法。基本上我所拥有的是:
@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访问它。我也不能使用元模型,因为那时我无法使用它...所以我做错了什么?我似乎无法想出任何简单的方法吗?