【问题标题】:Criteria api fetch object from ancestorCriteria api 从祖先获取对象
【发布时间】:2018-06-13 14:06:38
【问题描述】:

从祖先获取对象有什么变化吗?我有这些实体:

@Entity
@Table(name = "SPORT")
@DiscriminatorColumn(name = "sport_type", discriminatorType = DiscriminatorType.STRING, length = 32)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Sport implements Serializable {

@Column(name = "sport_type", insertable = false, updatable = false)
    private String sportType;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
    @JoinColumn(name = "HEAD_ID", referencedColumnName = "IDENT")
    @ToStringExclude
    protected Headquaters headquaters;

}




@Entity
@DiscriminatorValue(Constants.COST_REPORT_CODE)
public class HandSport extends Sport {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "COST_TRADE_ID", referencedColumnName = "TRADE_ID")
    private Playground Playground;


}

从这些实体中我生成了这个元模型

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(HandSport.class)
public abstract class HandSport_ extends com.test.entity.Sport_ {

    public static volatile SingularAttribute<HandSport, Playground> playground;
}

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Sport.class)
public abstract class Sport_ {

    public static volatile SingularAttribute<Sport, Headquaters> headquaters;   
    public static volatile SingularAttribute<Sport, String> id;


}

现在我只能获取游乐场:

EntityGraph<HandSport> fetchGraph = entityManager.createEntityGraph(HandSport.class);
fetchGraph.addSubgraph(HandSport_.playground);
select.distinct(true);
TypedQuery<HandSport> typedQuery = entityManager.createQuery(select)
.setHint("javax.persistence.loadgraph", fetchGraph);

为什么我不能添加

fetchGraph.addSubgraph(Sport_.headquters);

如果我这样做,我会看到编译错误:

"Cannot resolve method 'addSubgraph(javax.persistence.metamodel.SingularAttribute<com.test.entity.Sport, com.test.entity.Headquateres>)'"

从祖先获取值是否有任何变化?或者是否可以创建第二个 FetchGraph 并通过提示注册两个图?

【问题讨论】:

  • 您是否收到任何错误消息?
  • @SimonMartinelli - 没有错误信息,无法编译。它带有红色下划线并带有注释“无法解析方法'addSubgraph(javax.persistence.metamodel.SingularAttribute)'” - 我将此添加到我的问题中

标签: java jpa criteria-api jpa-2.1


【解决方案1】:

JPA API 在EntityGraph 类的各种方法中对泛型的使用不正确。 这是 2015 年的 reported to the JPA "expert group",但他们没有费心去修复它。

DataNucleus JPA 发布了他们自己的 JPA API jar,他们确实在前段时间为他们的用户修复了它,但是由于您使用的是 Hibernate,那么这对您没有好处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多