Я создаю простое приложение REST с dropwizard с помощью JDBI. Следующим шагом будет интеграция нового ресурса, который имеет отношения "один ко многим" с другим. До сих пор я не мог понять, как создать метод в моем DAO, который извлекает один объект, содержащий список объектов из другой таблицы.
Представления POJO будут примерно такими:
public class User {
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Account {
private int id;
private String name;
private List<User> users;
public Account(int id, String name, List<User> users) {
this.id = id;
this.name = name;
this.users = users;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return name;
}
public void setUsers(List<Users> users) {
this.users = users;
}
}
DAO должен выглядеть примерно так.
public interface AccountDAO {
@Mapper(AccountMapper.class)
@SqlQuery("SELECT Account.id, Account.name, User.name as u_name FROM Account LEFT JOIN User ON User.accountId = Account.id WHERE Account.id = :id")
public Account getAccountById(@Bind("id") int id);
}
Но когда метод имеет один объект как возвращаемое значение (Учетная запись вместо List <Account> ), похоже, нет способа получить доступ к более чем одной строке набора результатов в классе Mapper. Единственное решение, которое можно найти, описано в https://groups.google.com/d/msg/jdbi/4e4EP-gVwEQ/02CRStgYGtgJ, но оно также возвращает только набор с одним объектом, который не кажется очень элегантным. (И не может быть правильно использован классами resouce.)
Кажется, что используется метод Folder2 в свободном API. Но я не знаю, как правильно интегрировать с dropwizard, и я предпочел бы использовать API-интерфейс JDBI SQL, как рекомендовано в документации dropwizard.
Нет ли способа получить сопоставление "один ко многим", используя API-интерфейс SQL в JDBI? Это такой базовый вариант использования базы данных, что, я думаю, мне что-то не хватает.
Вся помощь очень ценится,
Тильман