EJB refresh nem módosítja az entitást

EJB refresh nem módosítja az entitást
2011-05-23T13:40:33+02:00
2011-06-20T21:31:31+02:00
2022-11-22T05:55:41+01:00
lurko87
Sziasztok!

Hibernate-el próbálok elérni MS-SQL adatbázist,
és amikor frissíteni szeretném az entitásomat
az nem változik.

A kódom az alábbi:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("RefreshTesztPU"); EntityManager em = emf.createEntityManager(); SajatEntitas m = em.find(SajatEntitas.class, Integer.valueOf(0)); // itt próbáltam a getReference-t is. System.out.println(m.getAllapotID()); m.setAllapotID(9); em.getTransaction().begin(); em.refresh(m); em.getTransaction().commit(); System.out.println(m.getAllapotID());

Az érdekesség még, hogy a legvégén az állapotID nem 9 hanem az eredeti érték (1).

Így néz ki az XML-em:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="RefreshTesztPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>refreshteszt.SajatEntitas </class> <properties> <property name="hibernate.connection.username" value=***********/> <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="hibernate.connection.password" value=***********/> <property name="hibernate.connection.url" value=***********/> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/> </properties> </persistence-unit> </persistence>

Valakinek van ötlete, mi lehet a hiba?
Mutasd a teljes hozzászólást!
A refresht biztos jól használod?

Mert Hibernate EntityManager eszeront a refresh

em.refresh(cat); //re-read the state (after the trigger executes

Inkább valami update kéne vagy hasonló. (saveOrUpdate, de szerintem van sima update vagy save is, sajna a hibernate már régen használtam.
Mutasd a teljes hozzászólást!

  • Átfutottam a doksit, elvileg nem is kellene update-hez
    a refresh metódust meghívni. Ha mappelve van az entitás (em.find(...)) akkor a

    getTransaction().commit()
    -al kiírja az adatbázisba a módosítást.

    Holnap meglesem hátha jó-e így (bár korábban mindig meghívtam refresh-t az ilyen jellegű műveletekhez)

    Minden esetre köszönöm a linket, hasznos volt.
    Mutasd a teljes hozzászólást!
  • Köszi a dokumentációt, sikerült vele célba érnem.
    Nem kell a refresh-t használni,
    elég ha a beginTransaction és a commit között
    elvégzem az objektumon a módosítást és a commit
    kiírja, feltéve ha map-elve van az entitás.

    Pl.:

    em.getTransaction.begin(); myObj.setId(id); // id beállítása em.getTransaction.commit(); // adatbázisba írás
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd