-->
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: [Solved] session.persist
PostPosted: Thu Jul 24, 2008 9:19 am 
Beginner
Beginner

Joined: Thu Jul 24, 2008 3:33 am
Posts: 20
Hallo!

Ich habe eine Applikation, die eine sehr grosse Datenmenge einliest und in eine DB speichert. Da diese derzeit über 2 Wochen läuft, bin ich dabei, diese zu optimieren und mir die Statements einzeln anzusehen. Was ich jetzt frage, ist höchstwahrscheinlich eine Anfängerfrage (bin ich ja auch), aber bis jetzt war mir das so nicht bewusst.

Hibernate version:
hibernate: 3.2.5.ga
hibernate-commons-annotations: 3.3.0.ga
hibernate-annotations: 3.3.0.ga

Name and version of the database you are using:
PostgreSQL 8.2

Classes:
Ich habe drei Tabellen, eine Detailtabelle und zwei allgemeine Tabellen. Beim Speichern der Detailtabelle geht bei einer allgemeinen Tabelle alles gut, bei der zweiten wird ein zusätzliches Select generiert, welches ich vermeiden möchte. Anbei die Detailtabelle (ohne Getter/Setter und Datencolumns):

Code:
@Entity
@Table(name="LOG_ENTRY")
public class RegisterLogEntry
{
   /**
    * ID des Eintrages.
    */
   @Id
   @GeneratedValue(generator="uuid-gen")
   @GenericGenerator(name="uuid-gen", strategy="uuid")
   @Column(name="ID")
   private String id;
   
   /**
    * ZMR-Transaktions-ID
    */
   @ManyToOne
   private Vorgang vorgang;
      
   /**
    * Log, in dem der Eintrag steht.
    */
   @ManyToOne
   private RegisterLog log;
   
   ...

Beide Verweise schauen gleich aus, der log-Eintrag wird in derselben Transaktion geschrieben, der vorgang-Eintrag ist schon existent.

The generated SQL (show_sql=true):
Wenn ich
Code:
       Vorgang vorgang = vorgangDao.find(transactionId);

aufrufe, wird der Vorgang erwartungsgemäß in der DB gesucht. Danach weise ich den Vorgang zu und speichere ihn:
Code:
       entry.setVorgang(vorgang);
       logEntryDao.persist(entry);


Beim persist wird nun erst folgendes Statement abgesetzt (ohne Datencolumns):
Code:
    select
        vorgang_.ZMR_TXID
    from
        public.VORGANG vorgang_
    where
        vorgang_.ZMR_TXID=?


Erst dann erfolgt das Insert:
Code:
    insert
    into
        public.LOG_ENTRY
        (CLASS, LINE_NUMBER, log_ID, MESSAGE, TIMESTAMP, vorgang_ZMR_TXID, ID)
    values
        (?, ?, ?, ?, ?, ?, ?)


Was mich stört, ist das SELECT vor dem Insert. Ich habe ja vorher ein find gemacht, was ja in einem SELECT resultiert (siehe auch http://forum.hibernate.org/viewtopic.php?t=988983), also warum nochmal?

Wenn ich aber das persist gegen ein saveOrUpdate austausche, bekomme ich eine Excetion, weil ich den Vorgang nicht zugewiesen haben, obwohl ich dieses eigentlich getan habe.

Wäre schön, wenn mir das jemand erklären könnte. Irgendwas versteh ich da nicht.
vielen Dank Christian


Last edited by ChrLipp on Mon Jun 29, 2009 10:40 am, edited 2 times in total.

Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 25, 2008 3:54 am 
Regular
Regular

Joined: Wed Apr 09, 2008 10:28 am
Posts: 52
edit: sorry habs zu schnell überflogen.


Last edited by kukudas on Fri Jul 25, 2008 9:24 am, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 25, 2008 8:38 am 
Beginner
Beginner

Joined: Thu Jul 24, 2008 3:33 am
Posts: 20
Ist das nicht genau dass, was ich schon mache?
Bin nicht sicher, ob ich das verstehe.

Gruss, Christian


Top
 Profile  
 
 Post subject:
PostPosted: Sat Aug 23, 2008 2:56 pm 
Beginner
Beginner

Joined: Thu Jul 24, 2008 3:33 am
Posts: 20
Solved: die Session wurde (über Spring HibernateTemplate) für jedes Statement geöffnet und wieder geschlossen. Daher war die die Session wieder neu und kannte das vorher gelesene Objekt nicht.

Weiters hatte ich einen Fehler im Mapping.

Gruss, Christian


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.