-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: identifier of an instance of ... was altered from ... to ...
PostPosted: Wed Dec 06, 2006 1:56 pm 
Beginner
Beginner

Joined: Mon Sep 04, 2006 7:18 am
Posts: 45
Hibernate version: 3.2

Hello all. I seem to get this very strange expception on my insert script:

Code:
org.hibernate.HibernateException: identifier of an instance of no.detnye.moteguiden.pojos.ProduktData was altered from 1165426136741 to 1165426136798


The strange thing is that my stack prints out and points some place in the code which has nothing to do with the ProduktData Pojo class.

Code:
at no.detnye.moteguiden.business.ForhandlerManagerImpl.getForhandlere(ForhandlerManagerImpl.java:164)


This code points to this:
Code:
public List getForhandlere() throws MoteguidenException {
      Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();
      session2.beginTransaction();
        Criteria criteria = session2.createCriteria(ForhandlerData.class);
        criteria.addOrder(Order.asc("fnavn"));
        return criteria.list();
   }


Code:
at no.detnye.moteguiden.ImportGeneralTest.testStore(ImportGeneralTest.java:153)

And this code points to this:
Code:
List forhandlere = forhandlerMgr.getForhandlere();


The script works just fine when I begin and commit the transaction for every object I am trying to save. But this results in a big loss in resources as my scripts takes 8 minutes to run when I am just importing 500 lines of csv data in my database.
Code:
session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(object);
session.getTransaction().commit();

What I instead want is to beginTransaction at the start and commit when I am finished saving all objects.

Can someone please help me? I have read that you cannot use the same session on the two instances of the same Pojo class, meaning two instances of ProduktData. Maybe this is the case, although I cant really see where I am doing this. I will output the relevant code in next reply

Please help...


Last edited by cash1981 on Wed Dec 06, 2006 2:03 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 06, 2006 2:01 pm 
Beginner
Beginner

Joined: Mon Sep 04, 2006 7:18 am
Posts: 45
Code:
CsvReader csv = new CsvReader(fileName, ';');
      try {
         session = HibernateUtil.getSessionFactory().getCurrentSession();
         session.beginTransaction();
         ProduktManager produktMgr = MoteguidenFactory.getMoteguiden()
               .getProduktManager();
         KategoriManager kategoriMgr = MoteguidenFactory.getMoteguiden()
               .getKategoriManager();
         ForhandlerManager forhandlerMgr = MoteguidenFactory.getMoteguiden()
               .getForhandlerManager();

         bruker = new BrukerData();
         forhandler = new ForhandlerData();
         sted = new StedData();
         forhandlersted = new ForhandlerStedData();
         merke = new MerkeData();
         produkt = new ProduktData();
         farge = new FargeData();
         publikasjon = produktMgr.getPublikasjonById("1"); // Ikke tilgjengelig
         kategori = new KategoriData();
         subkategori = new SubkategoriData();
         produktfarge = new ProduktFargeData();
         produktkategori = new ProduktKategoriData();
         forhandlerprodukt = new ForhandlerProduktData();

         boolean isDupKat;
         boolean isDupSubkatWithDefaultKat;
         boolean hasDupSubkatWithoutDefaultKat;
         boolean hasDefaultKategori;
         boolean hasDefaultSubkat;
         boolean isDupMerke;
         boolean isDupFarge;
         boolean isDupSted;
         boolean isDupForhandler;
         boolean isDupForhandlerSted;
         boolean hasNoSted;

         KategoriData katTest = new KategoriData();
         final KategoriData defaultKat = kategoriMgr.getKategoriById("1"); // Ikke
         // tilgjengelig
         KategoriData eksisterendeKat = new KategoriData();
         SubkategoriData subkatTest = new SubkategoriData();
         final SubkategoriData defaultSubkat = kategoriMgr
               .getSubkategoriById("1"); // Ikke tilgjengelig
         SubkategoriData eksisterendeSubkat = new SubkategoriData();
         MerkeData merkeTest = new MerkeData();
         MerkeData eksisterendeMerke = new MerkeData();
         FargeData fargeTest = new FargeData();
         FargeData eksisterendeFarge = new FargeData();
         ForhandlerData forhandlerTest = new ForhandlerData();
         ForhandlerData eksisterendeForhandler = new ForhandlerData();
         final ForhandlerData defaultForhandler = forhandlerMgr
               .getForhandlerById("1"); // Ikke tilgjengelig
         StedData stedTest = new StedData();
         StedData eksisterendeSted = new StedData();

         csv.readHeaders();

         /*
          * Det eneste denne import jobben sliter med er å lagre produkter
          * med ikke angitt kategori. Noen verdier stemmer, mens plutselig så
          * får den en veldig gammel kategori som verdi.
          */

         while (csv.readRecord()) {
            hasDefaultKategori = false;
            hasDupSubkatWithoutDefaultKat = false;
            isDupKat = false;
            isDupSubkatWithDefaultKat = false;
            hasDefaultSubkat = false;
            isDupMerke = false;
            isDupFarge = false;
            isDupSted = false;
            isDupForhandler = false;
            isDupForhandlerSted = false;
            hasNoSted = false;

            if (csv.get("fnavn").equalsIgnoreCase("")
                  || (csv.get("fnavn") == null)) {
               // Her bør det gi en error at vi må ha forhandler
            } else {
               try {
                  // Hent liste over det som ligger der
                  // og gjør en sjekk før du legger den inn
                  List forhandlere = forhandlerMgr.getForhandlere();
                  for (int i = 0; i < forhandlere.size(); i++) {
                     forhandlerTest = (ForhandlerData) forhandlere
                           .get(i);
                     if (forhandlerTest.getFnavn().equalsIgnoreCase(
                           csv.get("fnavn"))) {
                        isDupForhandler = true;
                        eksisterendeForhandler = (ForhandlerData) forhandlere
                              .get(i);
                        break; // break ut av for løkken
                     }
                     isDupForhandler = false;
                  }

                  if (!isDupForhandler) {
                     bruker.setId("" + System.currentTimeMillis());
                     bruker.setBrukernavn("bruker" + csv.get("fnavn"));
                     bruker.setPassord(RandomStringUtils
                           .randomAlphabetic(7));
                     bruker.setRettighet(BrukerData.LIMITED);
                     bruker.setIsEnabled(new Boolean(true));
                     try {
                        session.save(bruker);
                     } catch (Exception e) {
                        // Oki greit, det er exception, men ikke ødelegg
                        // noe
                     }
                     forhandler.setId("" + System.currentTimeMillis());
                     forhandler.setFnavn(csv.get("fnavn"));
                     forhandler.setIsEnabled(new Boolean(true));
                     forhandler.setBruker(bruker);
                  }
               } catch (Exception e) {
                  e.printStackTrace();
               }
            } // else

            if (csv.get("hjemmeside").equalsIgnoreCase("")
                  || (csv.get("hjemmeside") == null)) {
               if (!isDupForhandler) {
                  forhandler.setHjemmeside("Ikke tilgjengelig");
               }
            } else {
               if (!isDupForhandler) {
                  forhandler.setHjemmeside(csv.get("hjemmeside"));
               }
            }

            if (csv.get("harNettbutikk").equalsIgnoreCase("")
                  || (csv.get("harNettbutikk") == null)) {
               if (!isDupForhandler) {
                  forhandler.setIsNettbutikk(new Boolean(false));
               }
            } else {
               if (!isDupForhandler) {
                  if (csv.get("harNettbutikk").equalsIgnoreCase("ja")
                        || csv.get("harNettbutikk").equalsIgnoreCase(
                              "1")) {
                     forhandler.setIsNettbutikk(new Boolean(true));
                  } else {
                     forhandler.setIsNettbutikk(new Boolean(false));
                  }
                  try {
                     session.save(forhandler);
                  } catch (Exception e) {
                     e.printStackTrace();
                  }
               }
            }

            if (csv.get("bynavn").equalsIgnoreCase("")
                  || (csv.get("bynavn") == null)) {
               /*
                * Denne koden må også skrives om for å sjekke om ikke
                * tilgjengelig ikke er lagret fra før, som den egentlig er
                */
               sted = forhandlerMgr.getStedById("1"); // Ikke tilgjengelig
               hasNoSted = true;
            } else {
               try {
                  // Hent liste over det som ligger der
                  // og gjør en sjekk før du legger den inn
                  List steder = forhandlerMgr.getSteder();
                  for (int i = 0; i < steder.size(); i++) {
                     stedTest = (StedData) steder.get(i);
                     if (stedTest.getBynavn().equalsIgnoreCase(
                           csv.get("bynavn"))) {
                        isDupSted = true;
                        eksisterendeSted = (StedData) steder.get(i);
                        break; // break ut av for løkken
                     }
                     isDupSted = false;
                  }

                  if (!isDupSted) {
                     sted.setId("" + System.currentTimeMillis());
                     sted.setBynavn(csv.get("bynavn"));
                  }
               } catch (Exception e) {
                  e.printStackTrace();
               }
            } // else

            if (csv.get("land").equalsIgnoreCase("")
                  || (csv.get("land") == null)) {
               if (!isDupSted && !hasNoSted) {
                  sted.setLand("");
                  try {
                     session.save(sted);
                  } catch (Exception e) {
                     e.printStackTrace();
                  }
               }
            } else { // Hvis land inneholder verdi
               if (!isDupSted && !hasNoSted) {
                  sted.setLand(csv.get("land"));
                  try {
                     session.save(sted);
                  } catch (Exception e) {
                     e.printStackTrace();
                  }
               }
            }

            try {
               List fsList = forhandlerMgr.getForhandlerSteder();
               for (int i = 0; i < fsList.size(); i++) {
                  ForhandlerStedData fsd = (ForhandlerStedData) fsList
                        .get(i);

                  if ((fsd.getForhandler().getFnavn().equalsIgnoreCase(
                        forhandler.getFnavn()) && fsd.getSted()
                        .getBynavn().equalsIgnoreCase(sted.getBynavn()))
                        || (fsd.getForhandler().getFnavn()
                              .equalsIgnoreCase(
                                    eksisterendeForhandler
                                          .getFnavn()) && fsd
                              .getSted().getBynavn()
                              .equalsIgnoreCase(
                                    eksisterendeSted.getBynavn()))) {
                     isDupForhandlerSted = true;
                     break;
                  }
                  isDupForhandlerSted = false;
               }

               if (!isDupForhandlerSted) {
                  forhandlersted.setId("" + System.currentTimeMillis());
                  if (!isDupSted || hasNoSted) {
                     forhandlersted.setSted(sted);
                  } else {
                     forhandlersted.setSted(eksisterendeSted);
                  }
                  if (!isDupForhandler) {
                     forhandlersted.setForhandler(forhandler);
                  } else {
                     forhandlersted
                           .setForhandler(eksisterendeForhandler);
                  }
                  session.save(forhandlersted);
               }
            } catch (Exception e) {
               e.printStackTrace();
            }

            if (csv.get("produkt_merke").equalsIgnoreCase("")
                  || (csv.get("produkt_merke") == null)) {
               /*
                * Denne koden må også skrives om for å sjekke om ikke
                * tilgjengelig ikke er lagret fra før, som den egentlig er
                */
               merke = produktMgr.getMerkeById("1"); // Ikke tilgjengelig
            } else {
               try {
                  // Hent liste over det som ligger der
                  // og gjør en sjekk før du legger den inn
                  List merker = produktMgr.getMerker();
                  for (int i = 0; i < merker.size(); i++) {
                     merkeTest = (MerkeData) merker.get(i);
                     if (merkeTest.getMerkenavn().equalsIgnoreCase(
                           csv.get("produkt_merke"))) {
                        isDupMerke = true;
                        eksisterendeMerke = (MerkeData) merker.get(i);
                        break; // break ut av for løkken
                     }
                     isDupMerke = false;
                  }

                  if (!isDupMerke) {
                     merke.setId("" + System.currentTimeMillis());
                     merke.setMerkenavn(csv.get("produkt_merke"));
                     kategori.setBildesti("Ikke tilgjengelig");
                     session.save(merke);
                  }
               } catch (Exception e) {
                  e.printStackTrace();
               }
            } // else

            if (csv.get("kategori").equalsIgnoreCase("")
                  || (csv.get("kategori") == null)) {
               // defaultKat = kategoriMgr.getKategoriById("1"); //Ikke
               // tilgjengelig
               hasDefaultKategori = true;
            } else { // Kategorien finnes i import filen
               try {
                  // Hent liste over det som ligger der
                  // og gjør en sjekk før du legger den inn
                  List kategorier = kategoriMgr.getKategorier();
                  for (int i = 0; i < kategorier.size(); i++) {
                     katTest = (KategoriData) kategorier.get(i);
                     if (katTest.getKnavn().equalsIgnoreCase(
                           csv.get("kategori"))) {
                        isDupKat = true;
                        eksisterendeKat = (KategoriData) kategorier
                              .get(i);
                        break; // break ut av for løkken
                     }
                     isDupKat = false;
                  }

                  if (!isDupKat) {
                     kategori.setId("" + System.currentTimeMillis());
                     kategori.setKnavn(csv.get("kategori"));
                     kategori.setBildesti("Ikke tilgjengelig");
                     session.save(kategori);
                     // hasDefaultKategori = false;
                  }
               } catch (Exception e) {
                  e.printStackTrace();
               }
            }

            if (csv.get("subkategori").equalsIgnoreCase("")
                  || (csv.get("subkategori") == null)) {
               // defaultSubkat = kategoriMgr.getSubkategoriById("1");
               hasDefaultSubkat = true;
               isDupSubkatWithDefaultKat = true; // Må sette denne for å
               // få if til å fungere
               // riktig
            } else { // Subkategori finnes i filimport
               if (hasDefaultKategori) {
                  List subkategorier = kategoriMgr.getSubkategorier();

                  for (int i = 0; i < subkategorier.size(); i++) {
                     subkatTest = (SubkategoriData) subkategorier.get(i);
                     if (subkatTest.getSknavn().equalsIgnoreCase(
                           csv.get("subkategori"))) {
                        isDupSubkatWithDefaultKat = true;
                        eksisterendeSubkat = (SubkategoriData) subkategorier
                              .get(i);
                        break; // break ut av for løkken
                     }
                     isDupSubkatWithDefaultKat = false;
                  }

                  if (!isDupSubkatWithDefaultKat) {
                     subkategori.setId("" + System.currentTimeMillis());
                     subkategori.setSknavn(csv.get("subkategori"));
                     subkategori.setKategori(defaultKat);
                     session.save(subkategori);
                  }
               } else { // har ikke default kategori
                  // (!hasDefaultKategori)
                  List subkategorier = kategoriMgr.getSubkategorier();
                  for (int i = 0; i < subkategorier.size(); i++) {
                     subkatTest = (SubkategoriData) subkategorier.get(i);
                     if (subkatTest.getSknavn().equalsIgnoreCase(
                           csv.get("subkategori"))) {
                        hasDupSubkatWithoutDefaultKat = true;
                        eksisterendeSubkat = (SubkategoriData) subkategorier
                              .get(i);
                        break; // break ut av for løkken
                     }
                     hasDupSubkatWithoutDefaultKat = false;
                  }

                  if (!hasDupSubkatWithoutDefaultKat) {
                     subkategori.setId("" + System.currentTimeMillis());
                     subkategori.setSknavn(csv.get("subkategori"));
                     if (!isDupKat) {
                        subkategori.setKategori(kategori);
                     } else {
                        subkategori.setKategori(eksisterendeKat);
                     }
                     session.save(subkategori);
                  } // if(!hasDuSubkat)
               } // else { //har ikke default kategori
               // (!hasDefaultKategori)
            } // else { //Subkategori finnes i filimport

            if (csv.get("farge").equalsIgnoreCase("")
                  || (csv.get("farge") == null)) {
               farge = produktMgr.getFargeById("1"); // ikke tilgjengelig
            } else {
               try {
                  // Hent liste over det som ligger der
                  // og gjør en sjekk før du legger den inn
                  List farger = produktMgr.getFarger();
                  for (int i = 0; i < farger.size(); i++) {
                     fargeTest = (FargeData) farger.get(i);
                     if (fargeTest.getFargenavn().equalsIgnoreCase(
                           csv.get("farge"))) {
                        isDupFarge = true;
                        eksisterendeFarge = (FargeData) farger.get(i);
                        break; // break ut av for løkken
                     }
                     isDupFarge = false;
                  }

                  if (!isDupFarge) {
                     farge.setId("" + System.currentTimeMillis());
                     farge.setFargenavn(csv.get("farge"));
                     session.save(farge);
                  }
               } catch (Exception e) {
                  e.printStackTrace();
               }
            } // else

            produkt.setId("" + System.currentTimeMillis());
            // Produktnavn er ikke satt til å være unik
            if (csv.get("produktnavn").equalsIgnoreCase("")
                  || (csv.get("produktnavn") == null)) {
               produkt.setProduktnavn("Ikke tilgjengelig");
            } else {
               produkt.setProduktnavn(csv.get("produktnavn"));
            }
            if (csv.get("img_url").equalsIgnoreCase("")
                  || (csv.get("img_url") == null)) {
               produkt.setBildesti("Ikke tilgjengelig");
            } else {
               produkt.setBildesti(csv.get("img_url"));
            }

            if (!isDupMerke) {
               produkt.setMerke(merke);
            } else {
               produkt.setMerke(eksisterendeMerke);
            }
            produkt.setPublikasjon(publikasjon);

            if (!isDupSubkatWithDefaultKat && !hasDefaultSubkat
                  && !hasDupSubkatWithoutDefaultKat) {
               produkt.setSubkategori(subkategori);
            } else if ((hasDupSubkatWithoutDefaultKat && !hasDefaultSubkat && !isDupSubkatWithDefaultKat)
                  || (!isDupSubkatWithDefaultKat && hasDefaultKategori && !hasDupSubkatWithoutDefaultKat)
                  || (hasDefaultSubkat && hasDefaultKategori)) {
               produkt.setSubkategori(eksisterendeSubkat);
            } else { // (hasDefaultSubkat)
               produkt.setSubkategori(defaultSubkat);
            }

            produkt.setMaha(new Boolean(false));
            produkt.setHotna(new Boolean(false));
            produkt.setKupp(new Boolean(false));
            produkt.setSort(new Integer(0));
            if (csv.get("pris").equalsIgnoreCase("")
                  || (csv.get("pris") == null)) {
               produkt.setPris(new Double(0));
            } else {
               produkt.setPris(new Double(Double.parseDouble(csv
                     .get("pris"))));
            }
            produkt.setProduktlink(csv.get("produkt_url"));
            if (csv.get("tilgjengelig").equalsIgnoreCase("")
                  || (csv.get("tilgjengelig") == null)
                  || csv.get("tilgjenglig").equalsIgnoreCase("0")) {
               produkt.setIsEnabled(new Boolean(false));
            } else {
               produkt.setIsEnabled(new Boolean(true));
            }

            produkt.setBeskrivelse(csv.get("beskrivelse"));
            session.save(produkt);

            produktfarge.setId("" + System.currentTimeMillis());
            if (!isDupFarge) {
               produktfarge.setFarge(farge);
            } else {
               produktfarge.setFarge(eksisterendeFarge);
            }
            produktfarge.setProdukt(produkt);
            session.save(produktfarge);

            produktkategori.setId("" + System.currentTimeMillis());
            if (!isDupKat && !hasDefaultKategori) {
               produktkategori.setKategori(kategori);
            } else if (isDupKat && !hasDefaultKategori) {
               produktkategori.setKategori(eksisterendeKat);
            } else {
               produktkategori.setKategori(defaultKat);
            }

            produktkategori.setProdukt(produkt);
            session.save(produktkategori);

            forhandlerprodukt.setId("" + System.currentTimeMillis());
            if (!isDupForhandler && (forhandler != null)) {
               forhandlerprodukt.setForhandler(forhandler);
            } else if (eksisterendeForhandler != null) {
               forhandlerprodukt.setForhandler(eksisterendeForhandler);
            } else {
               forhandlerprodukt.setForhandler(defaultForhandler);
            }
            forhandlerprodukt.setProdukt(produkt);

            session.save(forhandlerprodukt);

         }
         csv.close();
      } catch (Exception e) {
         session.getTransaction().rollback();
         e.printStackTrace();
      }

      long end = System.currentTimeMillis();
      if (session.isOpen()) {
         session.getTransaction().commit();
         session.close();
      }


Top
 Profile  
 
 Post subject:
PostPosted: Thu Dec 07, 2006 11:38 am 
Beginner
Beginner

Joined: Mon Sep 04, 2006 7:18 am
Posts: 45
Ok. I fixed the problem.

The problem seemed to be that I needed to instansiate all my Pojo classes inside the while loop. Because otherwize hibernate thought that I was going to edit the same object, instead of saving a new one.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Dec 07, 2006 11:52 am 
Beginner
Beginner

Joined: Mon Sep 04, 2006 7:18 am
Posts: 45
Ok. I fixed the problem.

The problem seemed to be that I needed to instansiate all my Pojo classes inside the while loop. Because otherwize hibernate thought that I was going to edit the same object, instead of saving a new one.

Now the scripts run in ~75 seconds, a 650% increase in speed! :-)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.