[hibernate-issues] [Hibernate-JIRA] Resolved: (HHH-2130) SQLQuery does not autoflush all entities used in the query
Steve Ebersole (JIRA)
noreply at atlassian.com
Fri Nov 17 23:23:05 EST 2006
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2130?page=all ]
Steve Ebersole resolved HHH-2130:
---------------------------------
Resolution: Fixed
trunk / 3.2
> SQLQuery does not autoflush all entities used in the query
> ----------------------------------------------------------
>
> Key: HHH-2130
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2130
> Project: Hibernate3
> Type: Improvement
> Components: query-sql, core
> Versions: 3.1.3
> Environment: Hibernate version 3.1.3, Oracle v 9.2
> Reporter: Frank Tolstrup
> Assignee: Steve Ebersole
> Fix For: 3.2.2
>
>
> I have a problem with autoflushing on native SQL queries. The scenario is:
> 1. I use a complex sql with a lot of joined tables
> 2. I change some of the associated objects from the result (but not the returned types).
> 3. I do the same sql as in step 1
> The problem is that the autoflush before the sql in step 3 only flushes changes in objects of the class returned by the sql, NOT all other objects used in the query.
> If I change the query in step 3 to HQL it works as I would expect and flushes all objects included in the query.
> It says in the hibernate documentation (section 10.10 Flushing the session), that
> "However, Hibernate does guarantee that the Query.list(..) will never return stale data; nor will they return the wrong data."
> This seems not to be the case with native SQL queries.
> The SQL query: (flushes only changed Tjeneste objects)
> SQLQuery sqlQuery = session.createSQLQuery
> ("SELECT /*+ use_nl(a av) */ {t.*}"
> +"FROM TJENESTE t, "
> +"TJENESTEVERSION tv, "
> +"ALLOKERING a, "
> +"ALLOKERINGSVERSION av "
> +"WHERE t.TJENESTE_ID = tv.TJENESTE_ID "
> +"AND av.plan_id = 0 "
> +"AND av.slettet = 0 "
> +"AND av.allokering_id = a.allokering_id "
> +"AND a.medarbejder_id =:medarb "
> +"AND tv.tjeneste_id = av.tjeneste_id "
> +"AND tv.fra_tid >= :fraTid "
> +"AND tv.til_tid <= :tilTid"
> );
> The HQL query: (flushes changed objects of classes Tjeneste, TjenesteVersion, AllokeringsVersion, Allokering)
> ("SELECT av.tjeneste "
> +" FROM"
> +" TjenesteVersion tv,"
> +" AllokeringsVersion av"
> +" WHERE "
> +" av.plan.id = 0"
> +" and av.slettet = 0"
> +" and av.allokering.medarbejder.id = :medarb"
> +" and tv.tjeneste = av.tjeneste"
> +" and tv.plan.id = 0"
> +" and tv.fraTid >= :fraTid"
> +" and tv.tilTid <= :tilTid"
> It would be enough to add a method to SQLQuery to add entities to the QuerySpace that will be flushed before the query is executed. An api method to match the "<synchronize>" in a named query.
> Regards,
> Frank
> PS: See the thread in the Hibernate user forum:
> http://forum.hibernate.org/viewtopic.php?p=2324846
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list