hibernate problem

Status
Nicht offen für weitere Antworten.
J

Jimmy

Gast
ich weiß nicht ob ich hier richtig bin, aber irgendwie habe ich gerade ein kleinen hibernate problem und weiß momentan nicht weiter. ich hoffe hier kann mir jemand was dazu sagen.

ich beschreibe erstmal die theorie. wenn da schon was falsch ist, dann sagt mir dass, denn dann habe ich wenigstens schonmal einen ansatzpunkt.

Also so siehts aus:

Session öffnen
Transaktion beginnen
jetzt will ich ein Objekt laden session.load(); (Objekt befindet sich jetzt im Zustand persistent)
Transaktion schließen
Session schließen

(jetzt befindet sich das Objekt im Zustand Detached)

jetzt will ich das objekt updaten. stelle ich mir eigentlich so vor. so habe ich es überall gelesen:

Session öffnen
Transaktion beginnen
hier soll das Objekt geupdatet werden session.update();
Transaktion beenden
Session schließen.

So läuft das aber leider nicht. Bekomme immer ein Exception geworfen. Habe ich denn da schon ein Denkfehler? Eigentlich doch nicht oder? Ich weiß das man mit den Session auch anders umgehen könnte, aber so wie ich das oben beschrieben habe, müßte es doch egentlich klappen?

ich will das das geladene objekt geupdatet wird.

wer kann mir dazu was sagen?

L-ectron-X hat diesen Beitrag am 18.10.2007 um 19:14 editiert.
Titel des Themas angepasst.
 
G

Guest

Gast
Mist, ich was für eine Bezeichnung für den Thread. Ich habe immer die bekloppte Meldung bekomme der Titel kann aus Spamgründen nicht blablabla heißen. Was für ein Quatsch. Da ich nur Gast bin kann ich den Titel jetzt leider nicht mehr änder. Sorry. Ich hoffe ihr antwortet mir trotzdem :)
 
M

maki

Gast
So viel Text, so wenig aussagekraft ... ;)

Wie wär's mit der Fehlermeldung? *g*
 
G

Guest

Gast
hast du natürlich recht, aber es geht mir ja um die theorie.
wenn die theorie schon falsch ist, dann will ich selber dran herumbasteln.
aber wenn ihr mir sagt, dass es eigentlich so klappen müßte, dann poste ich auch die fehlermeldung.

aber ich erhalte diese fehlermeldung wenn ich ein update() oder saveOrUpdate() durchführe:

Code:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:

die exception ist ja eigentlich ziemlich aussagekräftig, aber wenn ich mich an meine theorie halte, dann sollte diese exception ja eigentlich gar nicht auftretet. wenn die theorie auch richtig ist :)
 
M

maki

Gast
Deine Theorie sollte stimmen.

Allerdings hast du zwei Objekte mit derselben id in derselben session.

Wieviel Objekte sind innerhalb einer Session?

Kannst du mal den Code für den Teil posten, indem du ein Update machst?
Wichtig wäre auch das Mapping der id, zB:
Code:
<id name="id" type="int" column="id" unsaved-value="0"> 
  <generator class="native"/> 
</id>
 
G

Guest

Gast
ja mache ich gerne.... ich teste nochmal eben was und wenn ich es schaffe, dann poste ich das gleich.
ansonsten kann ich das erst morgen posten.
trotzdem viel dank schonmal im voraus
 
M

maki

Gast
Wichtig beim mapping ist der "unsaved-value" Teil, er sagt Hibernate, wie er ein neues Objekt erkennen kann, das ist wichtig für saveOrUpdate.
 
S

SlaterB

Gast
warum sollten denn 2 Objekte die gleiche Id erhalten,
das kann doch gar nicht passieren, das detachte Objekt ist ja weiterhin in der DB

viel wahrscheinlicher ist doch, dass das eine Objekt in der neuen Session schon geladen wurde und noch in der detachten Version dazukommt,
aber Jimmy macht ja nicht mehr als
> Session öffnen
> Transaktion beginnen
> hier soll das Objekt geupdatet werden session.update();
nicht wahr? ;)
 
G

Guest

Gast
da hast du wahrscheinlich recht.

so sehen meine action-methoden aus.
Code:
    public String loadBike(){
    	 Session session = HibernateSessionVerwaltung.getSession();
    	 dasBike = (Bike) session.get(Bike.class, aBike);
       	 bike.setName(dasBike.getName());
    	 bike.setMarke(dasBike.getMarke());
    	 return "laden";
     }
	
	public String saveBike(){
		Session session = HibernateSessionVerwaltung.getSession();
		session.save(bike);	
		return "success";
	}
	
	public String updateBike(){
		Session session = HibernateSessionVerwaltung.getSession();
		session.update(bike); //session.saveOrUpdate();
		return "success";
	}

für jede action-methode die aufgerufen wird wird die session geöffnet, trans gestartet, aktion durchgeführt, trans geschlossen, session geschlossen.

die loadBike-Methode läd das aktuelle Bike in ein Formular. Hier soll es geändert werden können und schließlich geupdatet. das laden klappt, aber halt beim update erhalte ich immer die exception.

Code:
<?xml version="1.0"?>
  <!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
 
  <hibernate-mapping>
 
      <class name="beans.Bike" table="bike" >
          <id name="bikeId" type="java.lang.Integer" column="BIKE_ID" >
                <generator class="native" />
          </id>
          <property name="name" type="java.lang.String" column="NAME"/>          
          <property name="marke" type="java.lang.Integer" column="MARKE"/>          
      </class>
 
  </hibernate-mapping>

wenn ich anstatt update merge benutze, dann wird das zuletzt eingetragene objekt geändert. ist natürlich so auch nicht gewollt. es soll das zuletzt ausgewählte objekt aus einer tabelle geändert werden.

es ist wahrscheinlich genau das problem was slater gearde gesagt hat. ich würde so gerne jetzt weiter machen bis es klappt, aber ich muss jetzt dringend weg. danke schonmal für die antworten. morgen melde ich mich wieder. wenn ihr schon seht was falsch läuft, dann sagt bitte was dazu. danke.

PS: Slater was sollte das ;-)? :)
 
S

SlaterB

Gast
> PS:

damit meinte ich, dass meine Vermutung deiner Aussage 'du machst nix anderes außer update' widerspricht,
denn meine Vermutung war ja, dass das Objekt in der neuen Session schon vorhanden ist

warum du jetzt in deinem Posting mir soviel zustimmst verstehe ich auch nicht,
> wird das zuletzt eingetragene objekt geändert
+
> ist wahrscheinlich genau das problem was slater gesagt hat

das klingt nämlich eher nach maki Theorie der Probleme bei den Ids,

ich kann jedenfalls derzeit nix neues beitragen,
außer dem Tipp, Hibernate-Logging einzuschalten;
und zu versuchen, vor dem update den Inhalt der Session genauer zu untersuchen;
das fragliche Bike laden und mit dem detatched-Objekt vergleichen,
aber konkretes weiß ich nicht
 
G

Guest

Gast
Meine HibernateSessinVerwaltung hat die Operation getSession(), closeSession() und closeTransaction().

Bei getSession() wird die Session geöffnet und die Transaktion gestarte. Die anderen beiden Operationen machen das was ihr Name sagt.

Ich habe es bisher genrell so gemacht, dass diese Methoden bei jeder Action-Methode aufgerufen werden. Also findet jede Transaktion in einer komplett neuen Session statt. Habe mal gelsen, dass es Sinn macht die Session sofort wieder zu beenden, da bei Zugriff von mehreren Benutzern das System verlangsamt wird. (wenn 100 Sessions gleichzeitig geöffnet werden, obwohl einige Sessions gar nicht mehr grbraucht werden).

Ich benutze die Generator-Klasse native. Also erhält jedes neu angelegte Objekt eine ID. Also stell ich mir meine Code so vor, dass ein Objekt geladen wird, (geht dann durch session.close() in den Zustand Detached). Jetzt muss das Objekt in der neuen Session geupdatet werden können. (das geschieht ebvenfalls in einer neuen Session).
Laut Hibernate-Doku auf Seite 118 (10.6. Modifying detached objects) müßte es ja so auch möglich sein. Da steht aber auch folgendes:

If the Cat with identifier catId had already been loaded by secondSession when the application tried to reattach
it, an exception would have been thrown.

Wenn ich das auf meinen Code beziehe, dann ist es ja nicht der Fall, dass in der zweiten neu angelegten Session das Objekt geladen wird und dann geupdatet, sondern in der Session zuvor wird das Objekt geladen und in der kommenden verändert.




PS: Danke für die Namensänderung :)
 
S

SlaterB

Gast
> Habe mal gelsen, [..] 100 Sessions

wenn 100 User 100 Sessions auf haben, dann ist das vielleicht nicht gut,
wenn allein schon 1 User aber 100 Sessions pro Sekunde auf und zu macht ganz bestimmt auch nicht, falls das überhaupt zu schaffen ist

jeder User kriegt eine Session für seine gesamte Bearbeitung,
die wird nur geschlossen/ wieder geöffnet, wenn sich die Bearbeitung in sinnvolle Schritte unterteilen lässt
(z.B. in einer GUI ein Ereignis wie ein Button-Klick, auf einem Server ein Request eines Clients wie ein Web-Aufruf)

da du kaum mehrere User in deinem Programm hast (?), kannst du auch gleich nur eine Gesamtsession nehmen,
allerdings lernst du dann diese Probleme/ Techniken nicht kennen, was du vielleicht gerade vor hast
 
G

Guest

Gast
ja ok du hast betimmt recht, aber ich teste ja gerade noch herum.
wie ich das dann später mal realisiere, darum habe ich mir noch keine gedanken gemacht. so wie es jetzt ist soll es erstmal laufen. wie das dann später am optimalsten ist, darum mache ich mir erst später gedanken. ich will es ja jetzt erstmal lernen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eclipse 4 RCP Hibernate Problem Data Tier 3
J Hibernate Problem bei Master-Detail-Tabellen Data Tier 5
B Problem mit org.hibernate.LazyInitializationException Data Tier 11
S Problem beim Insert mit Hibernate Data Tier 9
P SQL PRoblem Hibernate? Data Tier 8
F Problem mit Hibernate Schema Update Data Tier 2
M Insert-Problem mit JPA/Hibernate Data Tier 4
H Hibernate Problem Data Tier 4
GilbertGrape Cascade Problem (Hibernate) Data Tier 3
boxi Hibernate Lazy Loading Problem Data Tier 2
M Problem mit Hibernate und SLF4J - NoSuchMethodException Data Tier 3
G Connection Problem - WAS 6.1, Hibernate, OS Authentication Data Tier 1
K Hibernate update-Problem Data Tier 36
N Hibernate - Problem mit Update/Insert Data Tier 4
T Hibernate/Spring JPA: eigene ID generieren Data Tier 5
Avalon @ManyToOne Hibernate oder JPA? Data Tier 5
D Hibernate Hibernate mit MariaDB Data Tier 1
ToBJo Hibernate Glassfish deploy mit Hibernate schlägt fehl Data Tier 1
C JPA Hibernate Map<String,String> richtig mappen Data Tier 2
S JPA Hibernate Search & EclipseLink (oder OpenJPA) Data Tier 0
R JPA Probleme mit Wechsel von EclipseLink auf Hibernate Data Tier 4
ARadauer Hibernate Entität readonly laden... Data Tier 1
G Hibernate SQL in Hibernate: Keine Parameter mit Index? Data Tier 2
P Wildfly + Hibernate + SQL Server Data Tier 0
E JPA Hibernate Query mit Timestamp hat seltsames Verhalten Data Tier 1
C Hibernate ProgressBar updaten mit Daten aus Hibernate Data Tier 4
B Hibernate und MySQL testen Data Tier 8
I Hibernate HQL: generiertes SQL ausgeben Data Tier 1
R mapping-file für hibernate zum Überschreiben der Annotationen Data Tier 7
R Hibernate Hibernate und Logback Data Tier 2
R Hibernate möchte Schema zwei mal undeployen Data Tier 2
F Hibernate Hibernate / JPA Data Tier 4
E Hibernate: Session vs EntityManager Data Tier 3
C Hibernate Hibernate Code Generation Data Tier 3
S Hibernate Mehrfachverbindung mit Hibernate Data Tier 3
M Hibernate Einstiegsfrage Data Tier 5
M Exception in thread "main" org.hibernate.MappingException: java.lang.ClassNotFoundException: Message Data Tier 4
S Hibernate Einstieg in Hibernate 3.2 sinnvoll? Data Tier 8
P JPA Eigene Vererbungsstrategie mit JPA / Hibernate Data Tier 2
Y Jboss seam-hibernate-jpa Data Tier 5
RaoulDuke Hibernate Map<String,String> mit Annotations mappen Data Tier 2
M Hibernate Hibernate with GWT Data Tier 4
C Hibernate JPA mysql db erstellen Data Tier 4
M Hibernate Hibernate liest Daten zu oft aus! Data Tier 16
pg1337 Hibernate Fragen Data Tier 11
D Probleme bei Left Joins mit Hibernate createCriterias() Data Tier 2
D Hibernate probleme mit Verlinkungstabelle Data Tier 4
2 Hibernate Annotations Data Tier 7
G Hibernate select update no wait Data Tier 8
Z Hibernate: Many-To-Many nur eine bestimmte Spalte Data Tier 3
K Hibernate - Envers - Erzeugung der SQL Skripte Data Tier 4
G Hibernate 1:n Beziehung mit Vererbung Data Tier 5
D Hibernate-Criteria-API (Projections und MAX-Funktion) Data Tier 6
L Hibernate: failed to lazily initialize a collection of role Data Tier 3
S Hibernate hibernate.cfg.xml Data Tier 14
D JPA vs Hibernate.cfg und Entitymanager Data Tier 6
H Hibernate - Mapping für Enumeration Data Tier 1
R Hibernate Criteria Abfrageproblem Data Tier 2
A Hibernate und jdbc zusammen Data Tier 4
D Mit Hibernate aus JUnit ein DB-Schema erzeugen Data Tier 6
S [Hibernate] No Persistence provider for EntityManager Data Tier 5
G Hibernate HQL und Interface Data Tier 4
G JSF Hibernate no session or session was closed Data Tier 12
T JPA2/Hibernate: Many-to-Many-Relation wird u.a. beim löschen nicht aktualisiert Data Tier 14
S (Hibernate) Mapping einer Datenbanktabelle mit mehreren Fremdschlüssel Data Tier 7
X [Hibernate] Zusammengesetzte Entities möglich? Data Tier 7
N Hibernate Fake? Data Tier 2
V Hibernate Projection Data Tier 2
T org.hibernate.impl.SessionFactoryImpl Memory Leak Data Tier 10
G Hibernate Composite key Data Tier 11
X [Hibernate] Connection Pool - MinSize ? Data Tier 2
R Hibernate Criteria OR Data Tier 2
T hibernate/jpa abgefragte Listen immer mit Null-Werten gefüllt Data Tier 8
X [Hibernate] Anderen Connection Pool - Vorschläge? Data Tier 3
ARadauer Hibernate DDL Loggen Data Tier 6
G Hibernate abfrage Collection Data Tier 3
X [Hibernate] ReverseEngineering - Eigene Strategy verwenden? Data Tier 3
R Hibernate Criteria .group größer als Data Tier 5
R Hibernate daten laden Data Tier 7
H [Hibernate]1:1 Beziehung Data Tier 8
H [Hibernate]No CurrentSessionContext configured! Data Tier 6
X [Hibernate] Lässt sich die Dauer eines SELECTs loggen? Data Tier 4
R Hibernate n:n Relationtabelle mit Date Data Tier 3
H [Hibernate] Unknown Entity Data Tier 3
H [Hibernate] Configuration Data Tier 3
C [Hibernate] Generierung von hbm.xml to Java Data Tier 4
lumo Eclipse & JPA & Hibernate & Derby Data Tier 5
J Zufallsauswahl aus ResultList bei JPA(Hibernate) / Performance Data Tier 3
M Hibernate: Datum 0001-01-01 erzeugt null-Datum Data Tier 4
G Datenbankzugriff mit Hibernate Data Tier 7
Y Hibernate - Angabe des Schemas Data Tier 6
LadyMilka (Hibernate) in Criteria implizierter Join durch Subquery's Data Tier 8
M Hibernate Mehr als 1 Object speichern? Data Tier 18
M Unerklärliche Hibernate Exception Data Tier 20
LadyMilka (Hibernate) subquery in FROM-Clause Data Tier 9
haemi Viele DTOs in hibernate IdentityMap Data Tier 3
LadyMilka (hibernate) UNION dem Dialekt hinzufügen Data Tier 3
M Hibernate + Oracle 10g XE Data Tier 3
lumo Hibernate - entity class not found Data Tier 5
J Vererbung mit JPA / Hibernate - pro/contra Data Tier 3

Ähnliche Java Themen

Neue Themen


Oben