Java 基于包含MappedSuperclass的元模型的JPA EntityGraph不可能?

Java 基于包含MappedSuperclass的元模型的JPA EntityGraph不可能?,java,jpa,entitygraph,Java,Jpa,Entitygraph,我正在尝试使用类型安全方法EntityGraph.addAttributeNodes(Attribute…Attribute)来构造实体图。我有一个带有@MappedSuperclass的类型层次结构,基本上如下所示: @MappedSuperclass public abstract class BaseEntity { @Id private int dbid; } @Entity public class Entity extends BaseEntity { p

我正在尝试使用类型安全方法
EntityGraph.addAttributeNodes(Attribute…Attribute)
来构造实体图。我有一个带有
@MappedSuperclass
的类型层次结构,基本上如下所示:

@MappedSuperclass
public abstract class BaseEntity
{
    @Id
    private int dbid;
}

@Entity
public class Entity extends BaseEntity
{
    private String someAttribute;
}
EclipseLink创建了以下元模型:

@Generated(value="EclipseLink-2.5.2.v20140319-rNA", date="2015-08-07T10:46:31")
@StaticMetamodel(BaseEntity.class)
public abstract class BaseEntity_ { 
    public static volatile SingularAttribute<BaseEntity, Integer> dbid;
}

@Generated(value="EclipseLink-2.5.2.v20140319-rNA", date="2015-08-07T10:46:31")
@StaticMetamodel(Entity.class)
public class Entity_ extends BaseEntity_ {
    public static volatile SingularAttribute<Entity, String> someAttribute;
}
要使其工作,方法签名是否需要如下所示:
EntityGraph.addAttributeNodes(Attribute…Attribute)
?这是规范的缺陷还是我忽略了什么

在我看来,这是一个与所述问题相关的问题。正如该问题的作者所指出的,单一属性的标准API
get
方法确实使用了
?super X
定义类型参数

但是,即使我添加了
someAttribute
节点,仍然有一个有点难看的警告,我认为它最多只能被抑制:

graph.addAttributeNodes( Entity_.someAttribute ); // generates warning: "Type safety: A generic array of Attribute<Entity,?> is created for a varargs parameter"
graph.addAttributeNodes(Entity_u.someAttribute);//生成警告:“类型安全:已为varargs参数创建属性的通用数组”
我同意

显然,如果您将代码更改为

EntityGraph<BaseEntity> graph = em.createEntityGraph(BaseEntity.class);
graph.addAttributeNodes(BaseEntity_.dbid );
EntityGraph=em.createEntityGraph(BaseEntity.class);
graph.addAttributeNodes(BaseEntity.dbid);
然后它将编译。 问题似乎确实存在于spec/API中,其中EntityGraph的泛型类型应用于addAttributeNodes参数(因此不允许超类字段)。是的,它确实说“T”是根实体的类型,但这并不意味着他们希望人们总是使用MappedSuperclass

我还要确认,通过对属性generic type使用“
?super T
”可以修复它(获取javax.persistence jar源代码并修改/重新运行)


我把它作为一个问题提出来,并不是说我建议屏息以待更新

谢谢你把它提出来给规范人员。我想我也有一个类似的问题:有路径(我恐怕记不清了,但我相信我在本例中放弃了实体图的类型安全构造,而采用了在实体上使用@NamedEntityGraph的非安全方式。
EntityGraph<BaseEntity> graph = em.createEntityGraph(BaseEntity.class);
graph.addAttributeNodes(BaseEntity_.dbid );