0

嗨,我有 2 个与休眠标准相关的问题

我有以下包含多种颜色的产品。

我希望找到至少包含红色和绿色的产品。

Product class

    String id;

    name;

    style;

    List<Color> colors{};

Color class

    id

    color

1)每次我进行检索时,每个产品都会根据它有多少种颜色出现..例如产品A有红绿蓝,它会出现3次。

我使用了 FetchMode: Select 但它似乎没有改变。

我能想到的唯一可能的解决方案是将它们插入哈希集中并仅重写主键的哈希码和相等方法

2) 如何返回根据与我的搜索最接近的匹配排序的查询?

例如,我搜索样式和颜色红色、绿色。

所以与款式颜色和红绿色相匹配的产品

4

1 回答 1

1

1)您使用需要区分结果。

这不是改变 FetchMode 的问题。

请看这篇文章

setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)

2)嗯......没有那种标准功能来自动查找和排序最接近的匹配的东西

无论如何,制作类似功能的最简单方法是使用 addOrder 和 createAlias 而不是 setFetch

ct.createAlias("colors", "cs")
  .add( Restrictions.like("style", value + "%"))
  .add( Restrictions.in("color", colorsArray ))
  .addOrder( Order.asc("style"))
  .addOrder( Order.asc("cs.color"))

我不能在这里写所有类型的匹配方法。

请参考这里的限制的各种表达

于 2012-07-11T04:10:48.927 回答