-->
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.  [ 13 posts ] 
Author Message
 Post subject: Version-Attribute und SQL Server
PostPosted: Fri Feb 05, 2010 8:43 am 
Newbie

Joined: Fri Feb 05, 2010 8:34 am
Posts: 15
Hallo Zusammen,

mein Problem ist, dass ich ein neues Objekt (einen User) angelegen will, und ihm ein bereits bestehendes Objekt (z.b. Sprache) mitgeben möchte. Eigentlich ganz trivial, und auch schon 100mal gemacht Zumindest in einem anderem Projekt....

Meine Klassen haben alle ein Integer Versions-Attribute.
Wenn ich dieses Attribut /Property auskommentiere funktionier das Abspeichern der Refrenz plötzlich.
Im letzten Projekt hatte ich den gleichen Aufbau , als Datenbank war allerdings Oracle zuständig.

Ich verwende also aktuell den SQL Server 2008. Ohne Versions-Property funktioniert alles prima, sobald ichs einkommentiere klappen alle lesenden Zugriffe auch noch....

Leider hilft mir die Board suche nicht start, da die wörter version und sql server nicht als suchbegriffe zugelassen sind ....


Hier nochmal kurz der Aufbau umrissen:

public class User
{
prop int Id;
prop string Name;
prop string Vorname;
prop Sprache Sprache;
prop int Version;
}

public class Sprache
{
prop int Id;
prop string Bezeichnung;

public static Sprache GetDefault()
{
DetachedCriteria....
return Default...
}
}


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Mon Feb 08, 2010 9:44 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Hallo,

wie soll Dir jemand helfen, wenn Du nicht mal berichtest was fuer einen Fehler Du bekommst ?


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Mon Feb 08, 2010 9:50 am 
Newbie

Joined: Fri Feb 05, 2010 8:34 am
Posts: 15
Hi,
Der Fehler lautet "object references null oder transient object"

also der Fehler der Auftritt wenn man einem Objekt in einer Property den Cascade Style "none" mitgibt.

Er versucht also das Objekt ( das gerade aus der Datenbank geladen wurde) nochmals in die Datenbank zu speichern.
Ich lade das Objekt in einer Session heraus , und versuche ein zweites Objekt mit der Refernez auf das erste mit einer zweiten Session wieder zu speichern.
Das hat mit Oracle bisher super funktioniert...

Wer mehr infos braucht, einfach fragen! Danke!


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Mon Feb 08, 2010 10:01 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Fuer die 2. Session ist das Sprach-object noch transient, d.h session2.contains(sprachobject) == false.
Du musst Dein sprachobject erst mit session2 verbinden (reattach) bevor Du es in session2 verwendest:
Code:
session2.lock(sprachobject, LockMode.NONE);


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Mon Feb 08, 2010 10:06 am 
Newbie

Joined: Fri Feb 05, 2010 8:34 am
Posts: 15
hört sich logisch an , aber wieso hats dann bisher genau so funktioniert ?
nur mit ner anderen Datenbank?!?

Und wenn ich das VersionsKennzeichen auskommentiere funktioniert mein restlicher Code auch ohne Änderung...

Deswegen hab ich eben den Verdacht dass hier irgendwas mit Nhibernate, dem Versionkennzeichen und dem SQL-Server im Zusammenspiel nicht passt


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Mon Feb 08, 2010 10:20 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Quote:
Und wenn ich das VersionsKennzeichen auskommentiere funktioniert mein restlicher Code auch ohne Änderung...


Das ist nachvollziebar, denn ohne VersionsKennzeichen aendert sich and deiner sprachinstanz nichts wenn Du es mit dem neuen User assozierst, deshalb kein update auf der sprachinstanz und deshalb auch kein Fehler.

Quote:
Deswegen hab ich eben den Verdacht dass hier irgendwas mit Nhibernate, dem Versionkennzeichen und dem SQL-Server im Zusammenspiel nicht passt


Ich wuerde eher sagen, mit Oracle hat es nur zufaelligerweise geklappt (eigentlich ein Fehler).


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Mon Feb 08, 2010 10:41 am 
Newbie

Joined: Fri Feb 05, 2010 8:34 am
Posts: 15
Quote:
Das ist nachvollziebar, denn ohne VersionsKennzeichen aendert sich and deiner sprachinstanz nichts wenn Du es mit dem neuen User assozierst, deshalb kein update auf der sprachinstanz und deshalb auch kein Fehler.


mmhh so ganz klar ists mir noch nicht.
Immerhin sollte ja der Teil, der entscheid ob ein Update ausgelöst wird oder nicht unabhängig von der Datenbank sein oder nicht ?
Für die Sprachinstanz wird btw ein Insert ausgelöst - - also noch viel schlimmer weil sich die Sprachen dann duplizieren würden....


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Mon Feb 08, 2010 10:57 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Quote:
Für die Sprachinstanz wird btw ein Insert ausgelöst -


Hast Du das session2.lock(sprachobject, LockMode.NONE); schon eingebaut ? wo denn ?
Source Code?

Es ist sehr frustrierend wenn man sich als Helfer gezwungen sieht, die noetigen Informationen zwischen den Zeilen rauszulesen oder sie mit der Zange stueckweise rausziehen zu muessen.


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Wed Feb 10, 2010 3:39 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Quote:
Für die Sprachinstanz wird btw ein Insert ausgelöst -


Also ich versuche wieder zwischen den Zeilen zu lesen und schaetze dass folgendes passiert:
1. anstatt Cascade Style "none", verwendest Du "all" oder "persist".
2. Du verwendest session2.lock(sprachobject, LockMode.NONE); noch nicht (oder an der falschen Stelle).
3. Da das zu assozierende sprachobject in session2 noch als transient angesehen wird
und Du Cascade.Persist eingeschalten hast, 'persistiert' er das sprachobject neu, was schliesslich
zu dem unerwuenschten insert fuehrt.


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Wed Feb 10, 2010 3:43 am 
Newbie

Joined: Fri Feb 05, 2010 8:34 am
Posts: 15
Hi
Danke für die Hilfe.
Deine Mutmaßungen sind soweit korrekt.

Ich werde versuchen das heute nochmal nachzustellen, dann kann ich sicher genaueres dazu sagen.
Bei einem kleinerem Beispiel kann ich auch sicher schneller Code posten.


Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Thu Feb 11, 2010 9:57 am 
Newbie

Joined: Fri Feb 05, 2010 8:34 am
Posts: 15
[DoppelPost]


Last edited by Doncarlos on Thu Feb 11, 2010 12:09 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Thu Feb 11, 2010 10:13 am 
Newbie

Joined: Fri Feb 05, 2010 8:34 am
Posts: 15
[DoppelPost]


Last edited by Doncarlos on Thu Feb 11, 2010 12:09 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject: Re: Version-Attribute und SQL Server
PostPosted: Thu Feb 11, 2010 12:09 pm 
Newbie

Joined: Fri Feb 05, 2010 8:34 am
Posts: 15
Hallo!

Also ich konnte es jetzt nachstellen.

Das Problem lag nicht an dem Locking.
Das Problem war dass das Sprachobjekt ein Versions Kennzeichen hatte.
Dessen unsaved Value war 0. Im Laufe der Entwicklung kam die Version im SQL Server erst dazu und wurde ebenfalls mit 0 initialisiert

Lange rede , kurzer Sinn, er hat das Sprachobjekt aus der Datenbank geladen, wegen der 0 in der Version für nicht gespeichert gehalten und die Exception geworfen.

Einen Moment lang dachte ich schon ich müsste an meiner "Middleware" noch feilen ;)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 13 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.