Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
BPMS 6.0 beta2
Description
There's at least one place where we have error during runtime if we use Hibernate on Ingres for persistance: class org.apache.ode.daohib.bpel.CorrelatorDaoImpl. The query "from HCorrelatorSelector as hs where hs.processType = :processType and hs.correlator.correlatorId = :correlatorId" used in this class makes Hibernate to implicitly generate SQL with join for update.
Unfortunately some DBMS (like Ingres for instance) do not support update for queries with JOIN. The workaround is to exlicitly define HQL with subquery instead:
"from HCorrelatorSelector as hs where hs.processType = :processType and hs.correlatorId = (select hc.id from HCorrelator hc where hc.correlatorId = :correlatorId)"
In cases like that we need dynamically define which HQL to use, i.e. we need to know which kind of DBMS we are running under. The definitive indicator is dialect (instance of org.hibernate.dialect.Dialect) is set for the current Session. We don't have possiblity now to access Session properties (all indicators are private fields). We should add some indicator which would be dynamically accessible for assessment.