[ zmau @ 01.06.2009. 13:23 ] @
Imam jednostavan Query sa parametrom koji je entitet. Vrednost tog entiteta setujem pozivom setEntity (probao sam i setParameter). Upit se regularno okine i vrati očekivani resultSet, međutim, kasnije, pri flašovanju sesije okine se update nad bazom koji null-uje vrednosti jednake vrednosti parametra u tabeli iz upita (što mi naravno nije namera).
Konkretno, kod izgleda ovako :
Code:
        String query = "select c from Contact c where mate = :mate";
        Query qFriend = getSession().createQuery(query);
        qFriend.setParameter("mate", user);
        List<Contact> contactList = qFriend.list();

i, nešto kasnije,
Code:
          Session session = (Session)currentSession.get();
          session.flush();
          session.getTransaction().commit();

Hibernate na konzolu ispiše po
Code:
Hibernate: update contact set ownerId=?, mateId=?, outsiderId=? where id=? 
za svaki od recorda koje vrati gornji select, i taj kod setuje svaki mateId na null.

U specifikaciji na https://www.hibernate.org/hib_docs/v3/api/ vidim da metode setEntity i setParameter služe baš za to i ne pominju se nikakvi bočni efekti. Dakle, u čemu je ovde fazon ? Odnosno, kako se uopšte setuju vrednosti entitetskih parametara ?
[ DeYo @ 01.06.2009. 15:17 ] @
Sve sto mogu da ti ponudim su pitanja...

Sta se desava sa elementima contactList izmedju dva code snipeta koja si dao?
Mozda imas neki problem u biznis logici, a ne direktno sa Hibernateom.

Kako ti je mapiran entitet Contract?

Jesi li siguran da u oba code snipeta radis sa istom Hibernate Session instancom? Mozda tu ima neceg.
[ zmau @ 02.06.2009. 01:46 ] @
Locirao sam problem i napravio workaround, ali i dalje ne kapiram šta se dešava.

Sličan ovakav algoritam koji čita iz neke druge tabele izvršava se korektno.
Kada tabelu contact suzim za polja koja mi (u ovom kontekstu) nisu neophodna, algoritam se izvrši korektno.
Konačno, ako tabelu ostavim u obliku u kojem je bila do sada, a iz mapping fajla izbrišem mapiranje jednog polja :
Code:
        <many-to-one name="outsider" class="com.firmname.community.beans.Outsider" fetch="select">
            <column name="outsiderId" />
        </many-to-one>
, algoritam se izvrši korektno.
A ja i dalje ne kapiram šta ima sporno u ovom xml snippetu. many-to-one kavih imam zilion u modelu. Mašinski generisan na osnovu baze (pomoću hibernate tools).
[ DeYo @ 02.06.2009. 12:30 ] @
Ovako postavljeno mapiranje znaci da ces imati jos jedan select upit ka bazi prilikom dohvatanja glavnog entiteta. Vidis li to u logu?

Pri tome je i setovanje atributa fetch nepotrebno jer je "select" implicitno podrazumenava default vrednost.
Probaj da prebacis na "join" da vidis sta ce se desiti.

Mada, ni ne vidim kako ovo moze da ima neke veze, ali ajd... ako vec kazes da nakon izbacivanja tog mapiranja je problem "resen".

Ono sto bih savetovao je da se obratis na Hibernate forum, ili da postujes na nihovu JIRA-u.
[ anon156554 @ 05.06.2009. 18:08 ] @
Radim diplomski na temu struts2 + hibernate3. Struts2 sam skontao,ali muku mucim sa hibernate-om, jer sam nasao gomilu pdf-ova od oko 1000 strana... Da li neko ima preporuku kako se izboriti sa hibernate-om, u vidu nekih pdf-ova koje preporucuje za citanje?
Hvala
[ dragic79 @ 05.06.2009. 18:17 ] @
I ja radim diplomski vezan za hibernate s tim sto radim nekakav sajt... Ako ti je potrebno imam neke dobre tutorijale za hibernate u pdf-u. Javi mi se na mail: [email protected]
[ DeYo @ 08.06.2009. 20:23 ] @
Mislim da bi bilo pametno koristiti Spring kao middle framework kojim bi se lako integrisali Hibernate kao back-end framework i neki front-end framework.
Uz sve ostale benefite koje Spring donosi, naravno.

Spring + Hibernate:
https://www.hibernate.org/441.html
Ovde se koristi JPA konfiguracija (persistence.xml), a ne Hibernate (hibernate.cfg.xml), a Hibernate je naveden kao provider u JPA konfiguraciji.
Dodatno, za osnovnu konfiguraciju, gde se ne koristi Hibernate Search, izbaciti iz konfiguracije bean MBeanExporter.

U servisnim klasama, koje su deklarisane kao Spring beanovi, se po potrebi koristi transactional anotacija koju Spring automatski prepoznaje:
Code:
@org.springframework.transaction.annotation.Transactional
public class BaseService implements IBaseService {...


U DAO klasama, koje rade sa Hibernate mapiranim data modelom a takodje su Spring beanovi, Spring automatski ubacuje JPA persistence context:
Code:
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {       
  this.entityManager = entityManager;
}




Spring + web frameworks:
http://static.springframework..../reference/webintegration.html
Ovde je data integracija sa Struts 1.1, kao i za Faces koju sam i ja koristio.
Za Struts2 probaj da izvuces potrebnu i dovoljnu konfiguraciju sa http://struts.apache.org/2.x/docs/struts-2-spring-2-jpa-ajax.html, s tim konkretno nemam prakticnog iskustva.

Kad se sve sklopi zaista tece fino, s front strane korisnikov zahtev se salje kroz bean/action web frameworka, taj zahtev se delegira kroz Spring beanove klasama koje su persistence context aware (Hibernate mapirane).