Hello, I want to suggest one optimization that significantly reduces number of DB queries in certain cases.
First about the problem: We have two entities: EMany, EOne (mapped to tables TMANY, TONE). These entities are associated using @ManyToOne on two columns (not the primary key). When we select EMany, hibernate generates left outer join, similar to: select TMANY.ID, TMANY.a, TMANY.b, TONE.ID, TONE.x, TONE.y from TMANY left otuer TONE on TMANY.a = TONE.x, TMANY.b = TONE.y In case if TONE record is present in DB, the outer join returns its columns and hibernate creates both EMany and EOne objects from the same result set. But in case if TONE record is absent in DB, outer joint returns NULLs for TONE columns, and hibernate tries to resolve EOne entities by additional queries: select ... from TONE where TONE.x = <EMany.a> and TONE.y = <EMany.b> This query is performed as many times as EMany records were selected, and always return nothing. The proposal is to not perform this additional query in case if result set have primary key column TONE.ID = NULL; we can be sure there is no DB record if primary key column is NULL. I've tried to fix this in the EntytyType.java, seems working. My code is in the attach (the diff is against the latest release hibernate-3.3.1.ga) Best regards, - Anton
EntytyType.java.diff
Description: Binary data
_______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev