私は2つのエンティティを持つと仮定します。最初のエンティティは、1対多の関係を持つ2番目のエンティティの親です。SpringデータJPA with Querydsl - URLの配列内の値によるフィルタ
class Item {
String name;
Integer price;
}
class Order {
List<Item> items;
String customerName;
}
そして、私はこのように定義されたリポジトリがあります。その後
interface OrderRepository extends JpaRepository<Order, Long>, QueryDslPredicateExecutor<Order> {
}
を、私は自動的に次のように述語にパラメータをバインドするコントローラを持っている:
だから、@RestController
@RequestMapping(path = "/orders")
class OrderController {
@RequestMapping(method = RequestMethod.GET)
List<Order> list(@QuerydslPredicate Predicate predicate) {
return orderRepository.findAll(predicate);
}
}
、私は照会することができますリポジトリから次のような特定のフィルタを使用して注文してください: curl -XGET http://localhost/orders?customerName=John
問題は、リスト内で値をフィルタリングできないことです。私は春のJPAとQuerydslで、リスト内の値をフィルタリングすることができますどのように質問があり、またhttp://localhost/orders?items.name=Bag
を試みるが、そう
java.lang.NullPointerException
at org.springframework.util.ReflectionUtils.getField(ReflectionUtils.java:143) ~[spring-core-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.data.querydsl.binding.QuerydslPredicateBuilder.reifyPath(QuerydslPredicateBuilder.java:185) ~[spring-data-commons-1.11.4.RELEASE.jar:?]
...
NullPointerException
を得ました。
注:私はquerydsl-JPA 3.7.4
おかげで春のブート1.3.4を使用します。
[参考文献](http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#core.web)に記載されている方法でバインディングを微調整しようとしましたか?型セーフ)、特にQuerydslBinderCustomizer? –
@OliverGierkeカスタムバインドを追加しようとしましたが、失敗します。私は問題が 'item.name'のパスにアクセスしようとしているが、' ListPath 'のフィールドに' NullPointerException'を引き起こすフィールド名がない 'QuerydslPredicateBuilder#reifyPath'の周りに問題があると思います。私も自分で実装しようとしていますが、コードベースに関する知識はほとんどありません。どんな助けもありがとう。 –
Stackle