在实际开发中一些的项目开发是不使用懒加载查询的,这时候一对多和多对多就要自己写查询的结构了,查询的时候一般都是刚开始有一个初始的查询条件来获取中介表的连表数据。再用连表数据的集合查询后一张表的结果集。
我们使用一个many-to-many作为例子讲解,在一个广告界面有许多的广告,广告是一个对象集合,每个广告都会有很多的标签。标签也是一个集合。一个标签对应着很多条广告。那么广告与标签就是many-to-many的关系。怎么不用懒加载使它们联系起来?
我们查询一个广告列表并显示每个广告所属的标签集合。首先定义一个model的类Ad里面存放两个属性 一个是广告的bean,另一个是List类型的标签的bean属性。这样具备最基础的可以显示广告的标签集合,之后控制器的代码先NEW一个LIst类型的Ad,现在已经具备循环出一个广告的列表并且每个广告都有自己的标签集合的List,之后就是怎么给这个集合赋值就可以了。
我们再New一个List类型的广告对象集合ADV,用于接收根据条件查询到的广告集合。之后迭代这个对象集合
根据每个ADV的ID获取中间表符合连表的集合,定义中间连表的集合并接收。在迭代中间表的对象
根据中间表的连表条件获取标签表的集合,这时候定义一个标签List的集合接收就可以。这样我们就已经根据查询条件获取的自己需要的广告列表和每个广告对象的标签集合。接下来只需要给ADV赋值就可以了。把自己的代码贴出来供大家参考.....
/**
*创建属相对象集合
**/
List<Relevance> ce=new ArrayList<Relevance>();
/*创建一个新闻对象的List
List<HealthConsult> he=new ArrayList<HealthConsult>();
根据一个查询条件查询出某种广告的List
he.addAll(tArticleSerice.getHealthConsult(Const.HTEALTH_CONSULT));
for(HealthConsult h:he)
{
创建一个广告对象,这样每次迭代的对象都可以添加到最初NEW的List里面
Relevance rele=new Relevance();
rele.setHealthConsult(h);
获取连表的中间集合
List<Tsu> ts=new ArrayList<Tsu>();
根据getList方法获取中间连表的获取的集合
t=tArticleSerice.getList(Integer.parseInt(h.getId().toString()));
NEW一个标签集合的列表用来接收获取的标签集合
List<String> str=new ArrayList<String>();
for(Tsu t:ts)
{
Object obj=new Object();
obj=tArticleSerice.getname(Integer.parseInt(t.gettSubjectId().toString()));
str.add(obj.getName());
}
添加标签集合到自己创建的对象里面
rele.setStrin(str);
把一个添加好元素的对象添加到最初NEW的List对象里面
re.add(rele);
}
这样不用懒加载的many-to-many就做好了。