考虑:
@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是否可以使用类似的东西?
任何帮助,指点,评论甚至批评都欢迎。
非常感谢约翰
在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()); } }