java - Hibernate 获取带有条件的相关表

标签 java spring hibernate

用户输入“test”关键字,我尝试按以下标准选择城市和这些城市中的市场:

可能没有一个市场包含“test”,但此时只有城市仅选择城市。或者可能是城市名称不包含“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”但选择所有市场

我的代码有什么问题,我该如何修复它?

谢谢

最佳答案

通常,当您看到 SQL 代码时,这种情况很容易调试(即设置 hibernate.show_sql=true 并且您将看到到底发生了什么)。

您的代码中至少存在一个问题:

criteria.createAlias("marketList", "marketInCity");

相同
criteria.createAlias("marketList", "marketInCity", JoinType.INNER_JOIN);

尝试修复

criteria.createAlias("marketList", "marketInCity", JoinType.LEFT_OUTER_JOIN);

关于java - Hibernate 获取带有条件的相关表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31992117/

相关文章:

java - 使用 JDBC 获取多个结果集不起作用

java - GVM 始终离线

java - 创建类路径资源中定义的名为“entityManagerFactory”的 bean 时出错

java - JPA 存储库通过嵌入 ID 查找不起作用

java - JPA+Hibernate+@Transactional注解的spring事务支持的奇怪行为

java - Hiber 缓存 : Cache all fixed data permanently

java - 如何在java数组/列表中保存int和string列?

java - Collections2.filter 方法不满足传递的参数

java - 如何将 Spring Framework 源代码导入到 eclipse 项目中?

java - 如何 Autowiring @bean类