假设我有一个像这样的数据库模式(发布图像的声誉不够) http://i.stack.imgur.com/9yT4v.png
如何将这些表及其所有数据连接到一个Java对象?
我知道如何从Person表中创建一个Java对象,但是如何在“addItem”方法下使用它来添加他在其他表中的所有项目(我知道这可能不起作用,但只是为了解释我在找什么?)
public class Person {
private int id;
private String firstname;
private String lastname;
private List<Item> personItems = new ArrayList<Item>();
//getters and setters for id, firstname, lastname
public void addItem(Item item){
this.personItems.add(item);
}
}
我查询一个人的所有项目:
SELECT p.PersonID, p.Firstname, p.Lastname, i.name
FROM Person as p, PersonItem as pi, Item as i
WHERE p.PersonID=pi.PersonID AND pi.ItemID = i.ItemID AND p.PersonID=?;
因此,如果人有4项,则查询结果为4行。但我真正想要的是一行,所有结果来自“i.name”列。否则“结果大小不正确:预期1,实际4”,将所有结果保存到列表是愚蠢的。
这是我到目前为止使用的一种样式,用于从一个表中创建一个对象。但是现在我需要从其他表到该对象的更多数据。有没有简单的方法来实现这个?
public Person findPerson(int id){
String sql = "select .. from .. where id=?";
Object[] parameters = new Object[]{id};
RowMapper<Person> mapper = new PersonRowMapper();
Person p = jdbcTemplate.queryForObject(sql, parameters, mapper);
return p;
}
答案 0 :(得分:0)
将您的查询更改为以下内容:
SELECT i.name
FROM Item as i
WHERE i.ItemID IN (
SELECT ItemID
FROM PersonItem
WHERE PersonID IN (
SELECT PersonID
FROM Person
WHERE PersonID = ?
)
)