package com.jspxcms.core.fulltext; import java.util.HashMap; import java.util.Map; import javax.persistence.EntityManager; import org.hibernate.CacheMode; import org.hibernate.Query; import org.hibernate.ScrollMode; import org.hibernate.ScrollableResults; import org.hibernate.Session; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.jspxcms.common.fulltext.LuceneIndexTemplate; import com.jspxcms.core.domain.Info; /** * InfoFulltextDaoImpl * * @author liufang * */ @Repository public class InfoFulltextDaoImpl implements InfoFulltextDao { public int addDocumentWhole(String[] treeNumber) { Session session = (Session) em.getDelegate(); Map<String, Object> params = new HashMap<String, Object>(); StringBuilder hql = new StringBuilder( "from Info bean where bean.status='A' and (1=2"); for (int i = 0, len = treeNumber.length; i < len; i++) { hql.append(" or bean.node.treeNumber like :treeNumber").append(i); params.put("treeNumber" + i, treeNumber[i] + "%"); } hql.append(")"); Query query = session.createQuery(hql.toString()); query.setProperties(params); query.setCacheMode(CacheMode.IGNORE); ScrollableResults infos = query.scroll(ScrollMode.FORWARD_ONLY); Info info; int count = 0; while (infos.next()) { info = (Info) infos.get(0); template.addDocument(FInfo.doc(info)); if (++count % 20 == 0) { session.clear(); } } return count; } private LuceneIndexTemplate template; @Autowired public void setLuceneIndexTemplate(LuceneIndexTemplate template) { this.template = template; } private EntityManager em; @javax.persistence.PersistenceContext public void setEm(EntityManager em) { this.em = em; } }