Dobrý den,

jakého typu je persistentní kontext? Jestliže TRANSACTION_SCOPED, tak na
konci transakce (při prvním commitu) jsou všechny entity převedeny do
stavu detached a při druhém commitu není v persistentním kontextu žádná
entita a tudíž se do databáze nic nezapíše.

Z.T.
-- 
Zdenek Tronicek
FIT CTU in Prague


Libor Jelinek napsal(a):
> Dobrý den,
> prosím můžete mi někdo pomoci vysvětlit a pochopit následující chování v
> JPA?
>
> Záměrně měním primární klíč entity, což je v JPA zakázáno. První commit
> tedy
> správně vyhodí "Exception Description: The attribute [date] of class
> [some.package.Holiday] is mapped to a primary key column in the database.
> Updates are not allowed.". Ale druhý a všechny další nic nevyhodí....
>
> Holiday h1 = EM.find(Holiday.class, new GregorianCalendar(2011, 0,
> 3).getTime());
>
> try {
> *    EM.getTransaction().begin();*
>     h1.setDate(new GregorianCalendar(2011, 0, 4).getTime());
> *    EM.getTransaction().commit()*;
>     System.out.println("First commit succeed");
> } catch (Exception e) {
>     System.out.println("First commit failed");
> }
>
> try {
> *    EM.getTransaction().begin();
> **    EM.getTransaction().commit()*;
>    System.out.println("Second commit succeed");
> } catch (Exception e) {
>    System.out.println("Second commit failed");
> }
>
> Vypíše se:
> First commit failed
> Second commit succeed
>
> Jelikož JPA nemá explicitní operaci update(), tak jediná možnost updatovat
> entitu do databáze je commit(), čímž by si EntityManager měl všimnout, že
> došlo ke změně v entitě. Jak ale může druhý jakýkoli commit proběhnout
> úspěšně, když entita stále obsahuje "neuložitelnou" hodnotu?
>
> (Používám EclipseLink 2.2.0.v20110202-r8913 s MySQL.)
>
> Díky za rady
> Libor
>

Odpovedet emailem