标准和根据它排序

时间:2012-07-11 02:01:33

标签: oracle hibernate

您好我有2个与休眠标准相关的问题

我有以下产品,其中包含许多颜色。

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

Product class

    String id;

    name;

    style;

    List<Color> colors{};

Color class

    id

    color

1)每次检索时,每个产品都会根据它有多少颜色显示出来。 例如,产品A有红绿蓝,它会出现3次。

我使用过FetchMode:选择,但似乎没有改变。

我能想到的唯一可行解决方案是将它们插入到一个hashset中,并仅重写主键的hashcode和equal方法

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

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

所以匹配样式颜色和红绿色的产品

1 个答案:

答案 0 :(得分:1)

1)你需要用来分散结果。

这不是改变FetchMode的问题。

请查看文章this

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"))

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

请参阅限制词here

上的各种表达方式