Hi all, I assume this is the right place to ask, please point me elsewhere if not.
I am learning Hibernate and came to such situation: I have a 1:N relation (invoice (faktura) and it's items (polozky)) mapped like: <set name="polozky" table="faktury_polozky" lazy="false" access="field" fetch="join"> <key column="id_faktura"/> <composite-element class="fakturace.Polozka"> <property name="nazev" not-null="true" /> <property name="mnozstvi" not-null="true"/> <property name="jednotka" not-null="true"/> <property name="cenaJednotky" not-null="true"/> </composite-element> </set> But, 1) When I list() the invoices, upon commit() hibernate DELETEs the items' rows from the DB and INSERTs them again with same values. No other action is done; getter returns the same collection object as setter retrieves; and I set access to "field" anyway. So here's the code: // LIST ... else if( "list".equals(args[0]) ){ List res = session.createQuery("FROM Faktura ORDER BY vystaveno ASC").list(); System.out.println("Nalezeno "+res.size()+" faktur.\n"); for (int i = 0; i < res.size(); i++) { Faktura f = (Faktura) res.get(i); System.out.println( f.Vypis() + "\n\n" ); // Vypis() uses only getters. } } // COMMIT + CLOSE System.out.println("------------------------- COMMIT"); session.getTransaction().commit(); And the log after commit: ------------------------- COMMIT Hibernate: delete from faktury_polozky where id_faktura=? and nazev=? and mnozstvi=? and jednotka=? and cenaJednotky=? Hibernate: delete from faktury_polozky where id_faktura=? and nazev=? and mnozstvi=? and jednotka=? and cenaJednotky=? Hibernate: insert into faktury_polozky (id_faktura, nazev, mnozstvi, jednotka, cenaJednotky) values (?, ?, ?, ?, ?) Hibernate: insert into faktury_polozky (id_faktura, nazev, mnozstvi, jednotka, cenaJednotky) values (?, ?, ?, ?, ?) ... etc., for every invoice (faktury) there's a delete and insert. So, what's that I do wrong? And 2), Hibernate does a select for each invoice to get it's items. I wonder whether this is the 1+N problem, because it is not caused by reading collection items one by one. I would expect hibernate to fetch all items with a SELECT like SELECT ... FROM invoice_items WHERE id_invoice IN ( SELECT id FROM invoices WHERE ... << the conditions generated from the HQL query >> ) At least that's the way I would do it in MySQL; currently I play with HSQL, maybe it's not capable of this. So is this normal? Thanks for any useful hints. Ondra Zizka ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ hibernate-devel mailing list hibernate-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hibernate-devel