8

これは正常に機能します。

 public Predicate toPredicate(Root<Campaign> root,
    CriteriaQuery<?> query, CriteriaBuilder cb) {
    return root.get("campState").get("statusId").in(campStatus);
}

しかし、私は:</p>に変更します

 return  root.get(Campaign_.campState).get(CampState_.campId).in(campStatus).

そしてそれは例外をスローします:</ p>

編集対象:org.hibernate.ejb.criteria.path.Abs​​tractPathImpl.getのNullPointerException

  @StaticMetamodel(Campaign.class)
  public class Campaign_ {
  public static volatile SingularAttribute<Campaign, CampState> campState;
  public static volatile SingularAttribute<Campaign, Long> campId;
  }

  @StaticMetamodel(CampState.class)
  public class CampState_ {
  public static volatile SingularAttribute<CampState, String> statusId;
  }

  Campaign.class
  @ManyToOne(cascade = {CascadeType.REFRESH, CascadeType.MERGE})
  @JoinColumn(name = "camp_status")
  public CampState getCampState() {
    return campState;
  }

  public void setCampState(CampState campState) {
    this.campState = campState;
  }
4

2 に答える 2

2

この回答を確認してください。

メタモデルとクラスは同じパッケージにある必要があるようです

于 2013-11-20T13:52:44.367 に答える
0

2 つのクエリが異なる属性に対して動作する場合。CampState_ には属性 campId がないため、2 番目のクエリをコンパイルできません (Campaign_ にはそのような属性があります。

静的メタモデルを使用した最初のクエリと同等のクエリは次のとおりです。

root.get(Campaign_.campState).get(CampState_.statusId).in(campStatus).
于 2013-08-18T17:42:41.803 に答える