我有桌子Product,,,,Category。在下面的 HQL 查询之后,我在页面上显示了几种语言而不是一种。TranslationLanguage
我知道我正在做一个 HQL 查询 ala:
“找到一个Products来自该类别并包含该语言的对象。”
但我需要“找到一个Product具有这样那样类别的对象并显示该类别的语言 - ru”。
这是我的 HQL 代码:
@Repository
public interface ProductRESTRepository extends CrudRepository<Product, Long> {
List<Product> findAll();
@Query("SELECT prod FROM Product as prod left join prod.category as trans where prod.category.defaultName = ?1 and trans.language.code like ?2")
List<Product> findProductsByCategoryName(String category, String language);
}
以下是它在屏幕上的显示方式:


题外话:我在 2010 年写的答案(!!)中找到了答案,与我的问题无关。
要解决我的问题,您只需要使用
left join fetch.最后,这是我使用 HQL 和 JPA 实现 i18n(国际化)的代码:
更新 1
处理多个表时出错
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple Bags: [...]解决起来很简单:您需要将所有内容都替换
List<>为Set<>. 您不需要重新创建表。只需重新运行代码)链接到错误描述及其解决方案 -链接