0 Replies Latest reply on Sep 11, 2011 6:04 AM by paul.setzermann

    Scrolling and merging

    paul.setzermann Newbie

      Hi all,


      I have the following problem:

      I try to scroll through a big data set and simultaenously start a nested criteria query and manipulate specific objects and then write them back to the database.

      I tried to flush() the session every 50 counts. I tried to use transactions. I tried several approaches but either it is not working or I get a time out exception from the transaction after scrolling and modifying 3000 objects.

      Is there a possiblity to commit those modifications to the database after an interval of let´s say 50 objects!?

      I also tried to set the jdbc batch parameter in persistence.xml.


      Thanks in advance.






      public class PredictRefsManager {
           * injected JPA entity manager
          @PersistenceContext(unitName = "AnnotationDatabase")
          private EntityManager em;
          private ADBAssemblyManager am;
                public void predictRefs(long speciesId, long assemblyId, String source1, String source2) throws FinderException, UpdateException {
                     ScrollableResults scr = session.createCriteria(ADBGene.class).add(Restrictions.eq("source", source1))
                                                        .createAlias("assembly", "a").add(Restrictions.eq("a.aID", (long)speciesId))
                                                        .createAlias("species", "s").add(Restrictions.eq("s.sID", (long)assemblyId)).scroll();
                     while (scr.next()) {
                          ADBGene gene = (ADBGene) scr.get(0);
                               List<ADBGene> refs = session.createCriteria(ADBGene.class,"g").createAlias("region", "rg").add(
                                  if(refs.size() > 0) {
                                            for (ADBGene ref : refs) {
                                                      ADBRelatedGene relGeneG = new ADBRelatedGene(gene, ref.getSource(), ref.getGeneID(), "predicted");
                                                      ADBRelatedGene relGeneR = new ADBRelatedGene(ref, gene.getSource(), gene.getGeneID(), "predicted");
                                                   if( refsCnt++ % 50 == 0) {
                        System.out.println("RefCnt= " + refCnt);