【发布时间】:2012-10-29 00:52:48
【问题描述】:
假设我有一个具有两个不同的一对多关系的对象。很像:
Customer 1<->M Brands 和 Customer 1<->M Orders
假设我的对象Customer 有两个与这两个对象相关的列表。
我读过这个例子:
http://forum.springsource.org/showthread.php?50617-rowmapper-with-one-to-many-query
它解释了如何使用单个一对多关系来做到这一点。为了您的方便,这里是 ResultSetExtractor 覆盖:
private class MyObjectExtractor implements ResultSetExtractor{
public Object extractData(ResultSet rs) throws SQLException, DataAccessException {
Map<Integer, MyObject> map = new HashMap<Integer, MyObject>();
MyObject myObject = null;
while (rs.next()) {
Integer id = rs.getInt("ID);
myObject = map.get(id);
if(myObject == null){
String description = rs,getString("Description");
myObject = new MyObject(id, description);
map.put(id, myObject);
}
MyFoo foo = new MyFoo(rs.getString("Foo"), rs.getString("Bar"));
myObject.add(myFoo);
}
return new ArrayList<MyObject>(map.values());;
}
}
我不认为它涵盖了如何同时使用两者。什么是最干净的方法?有没有比条件迭代更简单的方法?在这种情况下,集合会比列表更好吗?
【问题讨论】:
-
你的表有什么结构?
-
这是一个奇怪的结构,这是一个继承的项目。没有明确的关系迫使我转向 jdbc,而不是标准的 ORM。但是有用户定义的关系,也就是一个客户可以有很多订单,一个客户可以有很多品牌。因此,例如,如果我使用休眠,我会将我的对象
Customer与 2 个列表作为属性并将它们注释为一对多,但由于我使用的是直接查询和连接,我认为这需要两个不同的查询来填充对象列表Customer,否则它会返回一个混乱的结果集。 -
nono,只需告诉您在这种情况下有哪些表和列,以及是否存在从品牌到订单的功能映射,反之亦然,或者它们是完全独立的
-
好吧,客户有很多列(我真的是这个意思),并且有
customer_id和customer_account_number。这些是我用来分别加入订单和品牌的那些,尽管它们在数据库中没有标记为 FK,因此没有明确定义关系。是的,它是一个 db 的 cluster-f,但我没有办法解决这个问题。 -
品牌和订单没有关系。这些是独立的。
标签: java spring jdbc jdbctemplate spring-jdbc