2014-10-05 56 views
0

比方说,我有一个数据库架构是这样的(没有足够的信誉发表图片) http://i.stack.imgur.com/9yT4v.png数据到一个Java对象

你怎么会这些表和它所有的数据连接到一个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

查询更改为这样的事:

SELECT i.name 
FROM Item as i 
WHERE i.ItemID IN (
    SELECT ItemID 
    FROM PersonItem 
    WHERE PersonID IN (
     SELECT PersonID 
     FROM Person 
     WHERE PersonID = ? 
    ) 
) 
相关问题