如何使用Hibernate条件沿组属性提取对象的结果集
我正在寻找一种在春季使用hibernate标准交付对象集合java.util.map及其组属性的方法 示例域如何使用Hibernate条件沿组属性提取对象的结果集,hibernate,spring,Hibernate,Spring,我正在寻找一种在春季使用hibernate标准交付对象集合java.util.map及其组属性的方法 示例域 MyDomain { private String x; private String y; private String pos; //---Getters & Setters ---- } 我喜欢收藏 Map<String(X),Map<String(Y),List<MyDoamin>> 编辑
MyDomain {
private String x;
private String y;
private String pos;
//---Getters & Setters ----
}
我喜欢收藏
Map<String(X),Map<String(Y),List<MyDoamin>>
编辑
目前我正在Dao类中加载MyDomain的整个列表,并在服务类中初始化映射,如下所示
Map-ret=
新HashMap>();
尝试
{
List myDomains=this.myDomainDao.findAll();
Collections.sort(myDomains);
用于(MyDomain MyDomain:myDomains)
{
字符串x=myDomain.getX();
字符串y=myDomain.getY();
if(ret.get(x)=null)
{
ret.put(x,newhashmap());
}
if(ret.get(x).get(y)==null)
{
ret.get(x.put(y,newarraylist());
}
ret.get(x).get(y).add(myDomain);
}
}
捕获(例外e)
{
此.logger.warn(e);
this.logger.debug(e.getMessage());
}
返回ret;
我的努力是避免在服务中编写上述代码,并尝试在hibernate中执行
提前谢谢。
Rehman方法的
groupProperty
功能与您想象的不同。只有当查询使用聚合函数(sum、count等)聚合多行,并将group by
子句应用于查询时,才有意义
您需要的是纯Java代码:
List<MyDomain> domains = // find the MyDomain entities you want
Map<String, Map<String, List<MyDomain>>> domainsByXThenY = new HashMap<String, Map<String, List<MyDomain>>>();
for (MyDomain d : domains) {
String x = d.getX();
Map<String, List<MyDomain>> mapForX = domainsByXThenY.get(x);
if (mapFoxX == null) {
mapForX = new HashMap<String, List<MyDomain>>();
domainsByXThenY.put(x, mapForX);
}
String y = d.getY();
List<MyDomain> listForY = mapForX.get(y);
if (listForY == null) {
listForY = new ArrayList<MyDomain>();
mapForX.put(y, listForY);
}
listForY.add(d);
}
List domains=//查找所需的MyDomain实体
Map domainsbyxteny=新HashMap();
对于(MyDomain d:域){
字符串x=d.getX();
Map mapForX=domainsbyxtenny.get(x);
如果(mapFoxX==null){
mapForX=新的HashMap();
域byxtheny.put(x,mapForX);
}
字符串y=d.getY();
List listForY=mapForX.get(y);
if(listForY==null){
listForY=newarraylist();
mapForX.put(y,listForY);
}
添加(d);
}
是的,你是对的。目前,我正在做与您在文章中提到的相同的事情,但我在想,也许hibernate标准中已经提供了这样的功能。
Map<String, Map<String,List<MyDomain>>> ret =
new HashMap<String, Map<String, List<MyDomain>>>>();
try
{
List<MyDomain> myDomains = this.myDomainDao.findAll();
Collections.sort(myDomains);
for (MyDomain myDomain : myDomains)
{
String x = myDomain.getX();
String y = myDomain.getY();
if (ret.get(x) == null)
{
ret.put(x, new HashMap<String,List<MyDomain>>());
}
if (ret.get(x).get(y) == null)
{
ret.get(x).put(y, new ArrayList<MyDomain>());
}
ret.get(x).get(y).add(myDomain);
}
}
catch (Exception e)
{
this.logger.warn(e);
this.logger.debug(e.getMessage());
}
return ret;
List<MyDomain> domains = // find the MyDomain entities you want
Map<String, Map<String, List<MyDomain>>> domainsByXThenY = new HashMap<String, Map<String, List<MyDomain>>>();
for (MyDomain d : domains) {
String x = d.getX();
Map<String, List<MyDomain>> mapForX = domainsByXThenY.get(x);
if (mapFoxX == null) {
mapForX = new HashMap<String, List<MyDomain>>();
domainsByXThenY.put(x, mapForX);
}
String y = d.getY();
List<MyDomain> listForY = mapForX.get(y);
if (listForY == null) {
listForY = new ArrayList<MyDomain>();
mapForX.put(y, listForY);
}
listForY.add(d);
}