如何与 JDBI SQL 对象 API 建立一对多关系?
我正在使用JDBI创建一个简单的REST应用程序,其中包含dropwizard。下一步是集成与另一个资源具有一对多关系的新资源。到目前为止,我无法弄清楚如何在我的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>)时,似乎无法访问Mapper类中结果集的多行。我能找到的唯一接近的解决方案是在 https://groups.google.com/d/msg/jdbi/4e4EP-gVwEQ/02CRStgYGtgJ 中描述的,但是一个人也只返回一个包含单个对象的Set,这似乎不是很优雅。(并且不能被资源类正确使用。
似乎有一种方法可以在流畅的API中使用Folder2。但是我不知道如何将其与dropwizard正确集成,我宁愿坚持使用Dropwizard文档中建议的JDBI的SQL对象API。
真的没有办法在JDBI中使用SQL对象API获得一对多映射吗?这是数据库的一个基本用例,我认为我一定错过了一些东西。
非常感谢所有帮助,
蒂尔曼