JPA findBy可以选择多个项目

时间:2019-01-09 00:37:15

标签: spring-data-jpa spring-data

我正在寻找一个解决丑陋问题的简单方法。我正在使用Spring Data JPA,并且有7个相关的实体。我需要做一个findByEntity1_NameAndEntity2_NameAndEntity3_NameAndEntity4_NameAndEntity5_NameAndEntity6_NameAndEntity7_Name

我需要每个排列,包括和排除彼此的那些实体。我可以构建所有128种方法,并使用一个大写的语句选择要使用的方法,但这非常丑陋。我觉得我缺少此按钮上的简单按钮。

1 个答案:

答案 0 :(得分:0)

按示例查询方法

我认为对您来说最好的选择是使用Spring Data JPA的(imo,有点不常用)QueryByExample功能。在研究此答案时,I posted an answer somewhere else需要相同的答案。我将对此进行了解,以了解如何解决您的问题。

您首先需要将QueryByExampleExecutor移至Repository。 其次,您只需要像这样创建查询(并希望您对实体使用fluent builders!)

ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreNullValues();
Example<MyObject> exampleQuery = Example.of(new MyObject()
    .withEntity1(new Entity1().withName("foo"), matcher);
repository.findAll(exampleQuery);

将选择所有MyObject个元素,其中Entity1的{​​{1}}为name

foo

将选择{{1}的ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreNullValues(); Example<MyObject> exampleQuery = Example.of(new MyObject() .withEntity1(new Entity1().withName("foo"), .withEntity2(new Entity2().withName("bar"), .withEntity3(new Entity3().withName("baz"), .withEntity4(new Entity4().withName("foo"), .withEntity5(new Entity5().withName("bar"), .withEntity6(new Entity6().withName("baz"), .withEntity7(new Entity7().withName("foo") ), matcher); repository.findAll(exampleQuery); MyObject和{{1}的Entity1的{​​{1}}的所有name元素}等。