Hibernate使用条件获取相关表

时间:2015-08-13 15:10:05

标签: java spring hibernate

用户输入" 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"但选择所有市场

我的代码中的问题是如何解决的?

由于

1 个答案:

答案 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);