/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Hibernate og cache
Fra : Janus


Dato : 17-02-09 06:44

Hej NG!

Sikkert et simpelt problem med en tilsvarende simpel løsning, men jeg
har ikke gennemskuet den endnu:

Jeg har en klasse, TestArrayClass, der har en List<ValueObject>, hvis
ValueObject på index 0 indeholder en String "NEW VAL 0".

Jeg vil så gerne rette i dette ValueObject, således det indeholder
"NEW VAL 1", men persisterer ikke.

Henter jeg så dette ValueObject fra databasen, er værdien i det "NEW
VAL 1", hvilket jo er fint nok, den henter fra cache'en.

Jeg vil så gerne reloade min TestArrayClass, således at dens
ValueObject på index 0 _igen_ indeholder værdien "NEW VAL 0", men
dette kan jeg ikke rigtig få til at virke.

Jeg har prøvet session.evict(instansen af TestArrayClass) uden held.

Jeg er i tvivl om, hvor problemet er: Er det min mapping der er noget
galt med? Det er helt simpel:

    <list name="valueObject" cascade="all">
         <key column="testArrayClassID"/>
<index column="idx"/>
         <one-to-many class="test.ValueObject"/>
      </list>

Eller er det bare mig der har overset den rigtige metode at kalde på
min session?


Min testklasse er herunder.

Pfh tak,
Janus


--------

[...]
      TestArrayClass tac = (TestArrayClass) s.createQuery("from
TestArrayClass tac where TestArrayClassID = 1").uniqueResult();

      // Get the first ValueObject
      ValueObject obj0 = tac.getValueObject(0);
      System.out.println(obj0); // Has value "NEW VAL 0"

      // Change values in a ValueObject belongning to tac
      obj0.set("NEW VAL 1");

      // Update the ValueObject in the cache (not persisted)
      s.update(obj0);

      // Select the ValueObject from the database, but since it's not
persisted, it's fetched from the cache
      Query q0 = s.createQuery("from ValueObject obj where ValueObjectID =
" + obj0.valueObjectID);

      ValueObject test0 = (ValueObject)q0.uniqueResult();
      System.out.println(test0);

      // Try to reload the tac, so I can get the initial value of the
previously changed ValueObject
      s.evict(tac);
      TestArrayClass tac_copy = (TestArrayClass)s.load
(TestArrayClass.class, tac.testArrayClassID);
      System.out.println(tac_copy.getValueObject(0)); // Value is still
"NEW VAL 1"

[...]

 
 
Janus (20-02-2009)
Kommentar
Fra : Janus


Dato : 20-02-09 04:59

On 17 Feb., 14:44, Janus <janu...@gmail.com> wrote:
> Hej NG!
>
> Sikkert et simpelt problem med en tilsvarende simpel løsning, men jeg
> har ikke gennemskuet den endnu:
>
> Jeg har en klasse, TestArrayClass, der har en List<ValueObject>, hvis
> ValueObject på index 0 indeholder en String "NEW VAL 0".
>
> Jeg vil så gerne rette i dette ValueObject, således det indeholder
> "NEW VAL 1", men persisterer ikke.
>
> Henter jeg så dette ValueObject fra databasen, er værdien i det "NEW
> VAL 1", hvilket jo er fint nok, den henter fra cache'en.
>
> Jeg vil så gerne reloade min TestArrayClass, således at dens
> ValueObject på index 0 _igen_ indeholder værdien "NEW VAL 0", men
> dette kan jeg ikke rigtig få til at virke.
>
> Jeg har prøvet session.evict(instansen af TestArrayClass) uden held.
>
[cut]

Problem løst. Se http://www.coderanch.com/t/431784/Object-Relational-Mapping/java/with-Hibernate-Cache-think#1918511


Mvh Janus

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste