2017-04-08 5 views
1

私のリポジトリクラスで、querydsl-hibernate-searchモジュール、バージョン4.1.4、およびSpring Data JPAバージョン1.5.2を使用してクエリを作成しようとしています。私はメソッドを呼び出すとき:Hibernate SearchモジュールでQueryDSLソートを使用する際のエラー

public Iterable<Incident> findAll(Predicate predicate, int offset, int limit, OrderSpecifier<?>[] orders) { 
    return createQuery(predicate).orderBy(orders).offset(offset).limit(limit).fetch(); 
} 

を呼び出すこと:

private SearchQuery<Incident> createQuery(Predicate predicate) { 
    return new SearchQuery<>(getEntityManager().unwrap(HibernateEntityManager.class).getSession(), incident).where(predicate); 
} 

私はこのエラーを得た:

java.lang.NoSuchMethodError: org.apache.lucene.search.SortField.<init>(Ljava/lang/String;IZ)V 

は、コードソースの内部でみると、私は、クラスのメソッドを、問題を発見しました:LuceneSerializer、行:557:

public Sort toSort(List<? extends OrderSpecifier<?>> orderBys) { 
    List<SortField> sorts = new ArrayList<SortField>(orderBys.size()); 
    for (OrderSpecifier<?> order : orderBys) { 
     if (!(order.getTarget() instanceof Path<?>)) { 
      throw new IllegalArgumentException("argument was not of type Path."); 
     } 
     Class<?> type = order.getTarget().getType(); 
     boolean reverse = !order.isAscending(); 
     Path<?> path = getPath(order.getTarget()); 
     if (Number.class.isAssignableFrom(type)) { 
      sorts.add(new SortField(toField(path), sortFields.get(type), reverse)); 
     } else { 
      sorts.add(new SortField(toField(path), sortLocale, reverse)); 
     } 
    } 
    Sort sort = new Sort(); 
    sort.setSort(sorts.toArray(new SortField[sorts.size()])); 
    return sort; 
} 

クラスのSortFieldのコンストラクタメソッドは、無効なパラメータを持っている:それは私には思える

sorts.add(new SortField(toField(path), sortFields.get(type), reverse)); 

それはquerydsl-休止状態-さがすとLuceneの間のバージョンの競合の問題があります。

+0

これは確かにバージョンの競合のようです。 LuceneとHibernate Searchのどのバージョンを使用していますか? –

+0

提案:任意の2つの図書館を利用でき、それらが一緒に働くことは期待しないでください。特定の組み合わせで選択して、バージョンが整列するようにする必要があります。理想的には完全なバージョンアライメントですが、メジャー/マイナーバージョンとのマッチングを試みるのは実用的ではないことが多いためです。この場合、選択したHibernate Searchで使用されているApache Luceneのバージョンを確認しますが、選択したSpring DataとのHibernate ORMの互換性もチェックしてください。 – Sanne

+0

spring-boot-starterバージョン:1.5.2.RELEASE、hibernate-search-orm - バージョン:5.5.6.Finalおよびquerydsl-hibernate-検索バージョン:4.1.4 –

答えて

0

hereより、querydsl-hibernate-searchは、Hibernate Search(4.2.0.Final)の古代版に依存しています。私はそれがHibernate Search 5.5.6で動作することを期待していません。

多くのことが4.2.0.Final以来続いてきているので、私はあなたが唯一の2つのオプションがあると思う:

  • にHibernate検索の最新バージョンにアップグレードするquerydsl-hibernate-searchに貢献querydsl-hibernate-searchを使用して、あなたはそのままquerydsl-hibernate-searchを使用することができ、それが偶発ます休止検索(not even on the migration guide anymore)の本当に古いバージョンを使用することができ強制するbuilt-in query DSL in Hibernate Search

を使用しないでくださいあなたはHibernate ORMの古いバージョンを使用するように強制します。

+0

ありがとうございます。仰るとおりです。私は最近この問題に関する問題を開いた。 –

関連する問題