|
39 | 39 |
|
40 | 40 | import com.introproventures.graphql.jpa.query.schema.impl.GraphQLJpaExecutor;
|
41 | 41 | import com.introproventures.graphql.jpa.query.schema.impl.GraphQLJpaSchemaBuilder;
|
| 42 | +import com.introproventures.graphql.jpa.query.schema.model.starwars.Character; |
| 43 | +import com.introproventures.graphql.jpa.query.schema.model.starwars.Droid; |
42 | 44 |
|
43 | 45 | @RunWith(SpringRunner.class)
|
44 | 46 | @SpringBootTest
|
@@ -86,6 +88,41 @@ public void JPASampleTester() {
|
86 | 88 | assertThat(result).isNotEmpty();
|
87 | 89 | assertThat(result).hasSize(13);
|
88 | 90 | }
|
| 91 | + |
| 92 | + @Test |
| 93 | + @Transactional |
| 94 | + public void queryManyToManyTester() { |
| 95 | + // given: |
| 96 | + Query query = em.createQuery("select distinct droid from Droid as droid " |
| 97 | + + "left join fetch droid.friends as generatedAlias0 " |
| 98 | + + "inner join fetch generatedAlias0.friendsOf as generatedAlias1 " |
| 99 | + + "where generatedAlias1.name='Luke Skywalker' " |
| 100 | + + "order by droid.id asc"); |
| 101 | + |
| 102 | + query.setHint("hibernate.query.passDistinctThrough", false); |
| 103 | + |
| 104 | + // when: |
| 105 | + List<Droid> result = query.getResultList(); |
| 106 | + |
| 107 | + // then: |
| 108 | + assertThat(result).hasSize(2); |
| 109 | + |
| 110 | + assertThat(result.get(0).getName()).isEqualTo("C-3PO"); |
| 111 | + assertThat(result.get(0).getFriends()).hasSize(3); |
| 112 | + assertThat(result.get(0).getFriends()).extracting(Character::getName) |
| 113 | + .containsOnly("Han Solo", "Leia Organa", "R2-D2"); |
| 114 | + assertThat(result.get(0).getFriends()).flatExtracting(Character::getFriendsOf) |
| 115 | + .extracting(Character::getName) |
| 116 | + .containsOnly("Luke Skywalker"); |
| 117 | + |
| 118 | + assertThat(result.get(1).getName()).isEqualTo("R2-D2"); |
| 119 | + assertThat(result.get(1).getFriends()).hasSize(2); |
| 120 | + assertThat(result.get(1).getFriends()).extracting(Character::getName) |
| 121 | + .containsOnly("Han Solo", "Leia Organa"); |
| 122 | + assertThat(result.get(1).getFriends()).flatExtracting(Character::getFriendsOf) |
| 123 | + .extracting(Character::getName) |
| 124 | + .containsOnly("Luke Skywalker"); |
| 125 | + } |
89 | 126 |
|
90 | 127 | @Test
|
91 | 128 | public void getsNamesOfAllDroids() {
|
|
0 commit comments