一尘不染

休眠搜索顺序(按孩子数)

hibernate

考虑:

@Indexed
@Entity
public class TParent  implements java.io.Serializable {

 .....
 private Set<TChild> TChildSet = new HashSet<TChild>(0);

 @ContainedIn
 @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="TParent")
 public Set<TChild> getTChildSet() {
     return this.TChildSet;
 }

查询将是这样的:

FullTextQuery hibQuery = fullTextSession.createFullTextQuery( luceneQuery );
hibQuery.setSort( ... )

如何实现按孩子计数?

换句话说,返回的TParent列表的顺序将由TChildSet计数决定。

我知道@Formula可以在SQL环境中使用。我不确定Lucene是否可以使用类似的东西?

任何帮助,指点,评论甚至批评都欢迎。

非常感谢约翰


阅读 271

收藏
2020-06-20

共1个答案

一尘不染

在hibernate搜索中,您可以为此创建一个自定义Bridge

类似于以下内容:

@FieldBridge(impl = com.myco.myapp.CollectionCountBridge.class)
@ContainedIn
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="TParent")
public Set<TChild> getTChildSet() {
     return this.TChildSet;
}

使用自定义桥实现:

public class CollectionCountBridge extends PaddedIntegerBridge {

    @Override
    public String objectToString(Object object) {
        if (object == null || (!(object instanceof Collection))) {
            return null;
        }
        Collection<?> coll = (Collection<?>) object;
        return super.objectToString(coll.size());
    }
}
2020-06-20