您好我有2个与休眠标准相关的问题
我有以下产品,其中包含许多颜色。
我希望找到至少含有红色和绿色的产品。
Product class
String id;
name;
style;
List<Color> colors{};
Color class
id
color
1)每次检索时,每个产品都会根据它有多少颜色显示出来。 例如,产品A有红绿蓝,它会出现3次。
我使用过FetchMode:选择,但似乎没有改变。
我能想到的唯一可行解决方案是将它们插入到一个hashset中,并仅重写主键的hashcode和equal方法
2)如何返回根据与我的搜索最匹配的排序查询?
例如,我搜索样式和颜色为红色,绿色。
所以匹配样式颜色和红绿色的产品
答案 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
上的各种表达方式