[(N)Hibernate] Versioning

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:07
Ik ben even aan het spelen / testen met NHibernate & 'versioning'. Het komt erop neer dat ik een entity heb met een 'Version' property, die de versie van die entity bijhoudt. (logisch).

Iedere keer als ik een update doe van m'n entity, wordt die 'Version' in de DB veranderd. Echter, die wijziging wordt niet gereflecteerd in m'n entity.
Bv, Ik heb een object v/h type 'Customer'. De 'Version' property van dit object is 3. Als ik iets wijzig aan m'n object, en het ga saven, dan zie ik dat het corresponderende record in de DB voor z'n 'Version column' 4 gekregen heeft.

Echter, m'n in-memory representation van die Customer (m'n object dus), heeft nog altijd '3' voor z'n Version property.

Hoe kan ik dat het beste aanpakken, dat die waarde dus ook in m'n object veranderd wordt, zodanig dat dit dezelfde waarde krijgt als de waarde in m'n DB ? Kan ik dit NHibernate laten doen zonder dat hij het object terug uit de DB trekt ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk niet dat dat er standaard in zit. Volgens mij wordt de versie in de database met één verhoogd in plaats van keihard gezet. Wat zou betekenen dat je een extra query moet uitvoeren om de versie op te halen.

Acties:
  • 0 Henk 'm!

Verwijderd

Zonder roundtrip naar de database zal NHiberdate dat niet kunnen. Tussen de tijd dat jij je record/object hebt opgehaald en weer gesaved kunnen ettelijke andere gebruikers/processen dat object al hebben gewijzigd.

Bovendien is 't versienummer niet interessant voor de client (jij dus), maar alleen voor de routine die moet bepalen of er mag worden opgeslagen.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:07
Verwijderd schreef op donderdag 28 juni 2007 @ 00:59:
Zonder roundtrip naar de database zal NHiberdate dat niet kunnen. Tussen de tijd dat jij je record/object hebt opgehaald en weer gesaved kunnen ettelijke andere gebruikers/processen dat object al hebben gewijzigd.
Ja, dat is toch de bedoeling van die hele versioning ? Dat je optimistic concurrency kunt toepassen.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Heb je in Hibernate niet een soort refresh functie, waarmee je de staat van je object gelijk trekt met die van de database? In EJB 3.0 heb je ook iets vergelijkbaars, maar daar wordt het attribuut in het object zelf wel verhoogt bij een update. Vreemd dat Hibernate dit niet doet.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • tijn
  • Registratie: Februari 2000
  • Laatst online: 01-08 16:49
Voor de zekerheid heb ik even een testje gebakken omdat ik me niet voor kon stellen dat het versienummer in je object niet opgehoogd zou worden. Dit zou betekenen dat je zelf StaleObjectExceptions zou veroorzaken wanneer je bijvoorbeeld 1 object 2 keer update in dezelfde sessie en ik kan me niet herinneren dit ooit meegemaakt te hebben.

De versie is als volgt gemapped (niets bijzonders):
code:
1
<version column="Version" name="Version" type="Int32" />


In de test blijkt dat het versienummer in het object wel degelijk opgehoogd wordt, zonder dat er een query uitgevoerd wordt (queries in de gaten gehouden). Wel is het zo dat dit pas na het flushen van de sessie gebeurt (en waarschijnlijk ook wel na het comitten van een transactie). In de debugger was de versie voor het flushen van de sessie bijvoorbeeld 3 en direct na het flushen 4.

[ Voor 21% gewijzigd door tijn op 28-06-2007 11:09 ]

Cuyahoga .NET website framework


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:07
Hmm, raar. Ik ga het vanavond nog eens (her)bekijken.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:07
Idd, de version property wordt toch ge-updated. 8)7
zal wel blind geweest zijn ofzo.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

google zoek naar hibernate en versioning, zat over te vinden ;)

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:07
draad lezen voor je blaat. ;)

https://fgheysels.github.io/

Pagina: 1