我正在寻找一个解决丑陋问题的简单方法。我正在使用Spring Data JPA,并且有7个相关的实体。我需要做一个findByEntity1_NameAndEntity2_NameAndEntity3_NameAndEntity4_NameAndEntity5_NameAndEntity6_NameAndEntity7_Name
我需要每个排列,包括和排除彼此的那些实体。我可以构建所有128种方法,并使用一个大写的语句选择要使用的方法,但这非常丑陋。我觉得我缺少此按钮上的简单按钮。
答案 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
元素}等。