Я пытаюсь получить информацию из 2 разных таблиц с третьей между ними. Скажем, например, у нас есть структура базы данных, как это
дБ структура
Как видите, таблица foo_and_bar работает для создания отношения между foo и bar. Теперь мы можем сказать, что у одного foo есть много баров, где bar - это статическая таблица со статическими данными (представьте, что это отношение Player -> Items и таблица Inventory между ними). Теперь в Java код выглядит так:
Фу сущность
@Сущность
открытый класс Foo {
@Id
private Long ID;
private String fooData;
@OneToMany(mappedBy = "foo")
private List<FooAndBar> fooAndBars;
//Getters and setters left out for convenience
}
Барная сущность
@Сущность
Бар общественного класса {
@Id
private Long ID;
private String BarData;
@OneToMany(mappedBy = "bar")
private List<FooAndBar> fooAndBars;
//Getters and setters left out for convenience
}
Сущность FooandBar
открытый класс FooAndBar {
@Id
private Long ID;
private String fooData;
@ManyToOne
@JoinColumn(name = "foo_id")
private Foo foo;
@ManyToOne
@JoinColumn(name = "bar_id")
private Bar bar;
//Getters and setters left out for convenience
}
Теперь скажите, что мы хотим найти все Бары для одного Foo. Для этого мы создаем FooAndBarRepository с 1 методом findByFooId
@RestController
public class FooAndBarRepo extends JpaRepository<FooAndBarRepo, Long>{
List<Bar> findByFooId(Long id);
}
И написать простой контроллер, чтобы сделать запрос GET, подобный этому
@Autowired
FooAndBarRepo fooAndBarRepo;
@RequestMapping("/get_bars")
public String getBars(@RequestParam(value = "fooId") Long fooId){
List<Bars> = fooAndBarRepo.findByFooId(fooId);
return "success!";
}
Теперь, предположив, что в нашей базе данных действительно есть foo с fooId, если мы сделаем / get_bars? FooId = {validIdHere}, мы получим ConverterNotFoundExeption, как это
No converter found capable of converting from type
[FooAndBar] to type [Bar]
Ошибка в этой строке кода в нашем контроллере отдыха
List<Bar> findByFooId(Long id);
Что я делаю не так? Почему весна не может конвертировать FooAndBar в экземпляр Bar?
EDIT:
Я попытался сопоставить Query вручную с моим методом findByFooId следующим образом
@Query("select bar.id, bar.data from foo" +
"left join fooandbar fb on foo.id = fb.foo_id" +
"left join bar.id = fb.bar_id" +
"where foo_id = :fooId")
List<Bar> findByFooId(@Param("fooId") Long id);
Запрос работает, но теперь я получаю
No converter found capable of converting from type
[Integer] to type [Bar]
Итак, я получаю Данные, как мне преобразовать их в объект типа Bar?