用户输入“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/