JDBI を使用して dropwizard で単純な REST アプリケーションを作成しています。次のステップは、1 対多の関係を持つ新しいリソースを別のリソースと統合することです。これまで、別のテーブルからオブジェクトのリストを保持する単一のオブジェクトを取得するメソッドを DAO で作成する方法を理解できませんでした。
POJO 表現は次のようになります。
ユーザー 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;
}
}
アカウント POJO:
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 users;
}
public void setUsers(List<User> 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>ではなくAccount )、Mapper クラスの resultSet の複数の行にアクセスする方法はないようです。私が見つけることができる唯一の解決策はhttps://groups.google.com/d/msg/jdbi/4e4EP-gVwEQ/02CRStgYGtgJで説明されていますが、その解決策は単一のオブジェクトを持つセットのみを返しますが、これはあまり見えませんエレガント。(また、リソース クラスでは適切に使用できません。)
流暢な API でFolder2を使用する方法があるようです。しかし、それを dropwizard と適切に統合する方法がわかりません。dropwizard のドキュメントで推奨されているように、JDBI の SQL オブジェクト API に固執したいと思います。
JDBI で SQL オブジェクト API を使用して 1 対多のマッピングを取得する方法は本当にないのでしょうか? これは、データベースの非常に基本的な使用例であるため、何かが欠けているに違いないと思います。
すべての助けに感謝します、
ティルマン