用户输入" test"关键字和我试图通过这些标准选择这些城市的城市和市场:
可能没有市场包含"测试"但是目前只有城市才选择city.Or可能是城市名称不包含" test"但当时市场包含选择该城市并获取该城市所包含的市场
我的代码是:
Criteria criteria = getSession().createCriteria(City.class);
criteria.createAlias("marketList", "marketInCity");
Criterion citySearch = Restrictions.like("name", name, MatchMode.ANYWHERE);
Criterion marketSearch= Restrictions.like("marketInCity.name", name, MatchMode.ANYWHERE);
criteria.add(Restrictions.or(citySearch, marketSearch));
criteria.setFetchMode("marketList", FetchMode.JOIN).add(
Restrictions.like("marketInCity.name", name, MatchMode.ANYWHERE)
);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
结果我可以获得城市名称包含的所有城市" test"或者至少有一个市场名称包含" test"但选择所有市场
我的代码中的问题是如何解决的?
由于
答案 0 :(得分:1)
通常,当您看到SQL代码(即设置hibernate.show_sql=true
并且您将看到究竟发生了什么)时,这种情况很容易调试。
您的代码中至少有一个问题:
criteria.createAlias("marketList", "marketInCity");
与
相同criteria.createAlias("marketList", "marketInCity", JoinType.INNER_JOIN);
尝试修复
criteria.createAlias("marketList", "marketInCity", JoinType.LEFT_OUTER_JOIN);