-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: UPGRADE lock mode leads to invalid FOR UPDATE OF (Postgres)
PostPosted: Wed Nov 03, 2004 9:20 am 
Newbie

Joined: Wed Nov 03, 2004 6:22 am
Posts: 1
Location: Berlin, Germany
Hello,

I have a problem with a query using the PostgreSQL dialect.

A query on a table called "ne" with the lock mode set to UPGRADE is translated into an SQL-query, which ends this way:
"for update of this"
(see complete statement below),
which leads to a hibernate exception (ERROR: relation "this" in FOR UPDATE clause not found in FROM clause).

This happens with the PostgreSQL dialect; the query worked well with Oracle, as the Oracle-dialect does not support "forUpdateOf".

Workarounds:
add qp.setLockModeAlias("ne"); in the DAO object
or
build own version of hibernate2.jar, with supportsForUpdateOf returning false in PostgreSQLDialect.java.

I would have expected hibernate to add the table name automatically to the "for update of" clause.

Did I forget something in the hibernate configuration or is this a hibernate bug?

Regards
Ralf


Hibernate version:2.1.6

Code in overloaded DAO object
QueryProperties qp = new HibernateQueryProperties();
qp.setLockMode(HibernateLockMode.UPGRADE);

List l = getNamedQuery(QUERY_GET_NES_BY_ACTIVATION_AND_EMID, new Serializable[]
{ new Integer(EnableSwitch.ENABLED.getOrdinal()),emId},qp);

query statement in mapping file
<query name="getNesByActivationAndEmid">
from Ne ne
where ne.activationAsInt= ?
and ne.emAsId= ?
</query>


Name and version of the database you are using:PostgreSQL 8.0.0 beta 4

The generated SQL (show_sql=true):
2004-11-03 12:34:23,062 DEBUG [net.sf.hibernate.hql.QueryTranslator] SQL: select ne0_.ID as ID, ne0_.MO_VERSION as MO_VERSION, ne0_.LAST_UPDATED as LAST_UPD3_, ne0_.USED_BY as USED_BY, ne0_.CAPABILITIES as CAPABILI5_, ne0_.LOCATION as LOCATION, ne0_.DISPLAY_ADDRESS as DISPLAY_7_, ne0_.ACTIVATION as ACTIVATION, ne0_.ADMINISTRATIVE_STATE as ADMINIST9_, ne0_.RECONNECT_INTERVAL as RECONNE10_, ne0_.DISPLAY_DEVICE_DATA as DISPLAY11_, ne0_.LOGIN_PASSWORD_MD5 as LOGIN_P12_, ne0_.NAME as NAME, ne0_.LOGIN_USER_NAME as LOGIN_U14_, ne0_.SUPPORTED_LAYERS as SUPPORT15_, ne0_.COM_STATE as COM_STATE, ne0_.INIT_STATE as INIT_STATE, ne0_.PROPERTIES_VALID as PROPERT18_, ne0_.ADD_INFO as ADD_INFO, ne0_.RETRY_COUNTER as RETRY_C20_, ne0_.NE_TYPE_ID as NE_TYPE_ID, ne0_.PARENT_NE_ID as PARENT_22_, ne0_.ICON_ID as ICON_ID, ne0_.EM_ID as EM_ID, ne0_.GLOBALID as GLOBALID, ne0_.INIT_TIME as INIT_TIME, ne0_.ACCESS_CONTROL as ACCESS_27_ from NE ne0_ where (ne0_.ACTIVATION=? )and(ne0_.EM_ID=? )
2004-11-03 12:34:23,078 DEBUG [net.sf.hibernate.impl.BatcherImpl] about to open: 0 open PreparedStatements, 0 open ResultSets
2004-11-03 12:34:23,078 DEBUG [net.sf.hibernate.SQL] select ne0_.ID as ID, ne0_.MO_VERSION as MO_VERSION, ne0_.LAST_UPDATED as LAST_UPD3_, ne0_.USED_BY as USED_BY, ne0_.CAPABILITIES as CAPABILI5_, ne0_.LOCATION as LOCATION, ne0_.DISPLAY_ADDRESS as DISPLAY_7_, ne0_.ACTIVATION as ACTIVATION, ne0_.ADMINISTRATIVE_STATE as ADMINIST9_, ne0_.RECONNECT_INTERVAL as RECONNE10_, ne0_.DISPLAY_DEVICE_DATA as DISPLAY11_, ne0_.LOGIN_PASSWORD_MD5 as LOGIN_P12_, ne0_.NAME as NAME, ne0_.LOGIN_USER_NAME as LOGIN_U14_, ne0_.SUPPORTED_LAYERS as SUPPORT15_, ne0_.COM_STATE as COM_STATE, ne0_.INIT_STATE as INIT_STATE, ne0_.PROPERTIES_VALID as PROPERT18_, ne0_.ADD_INFO as ADD_INFO, ne0_.RETRY_COUNTER as RETRY_C20_, ne0_.NE_TYPE_ID as NE_TYPE_ID, ne0_.PARENT_NE_ID as PARENT_22_, ne0_.ICON_ID as ICON_ID, ne0_.EM_ID as EM_ID, ne0_.GLOBALID as GLOBALID, ne0_.INIT_TIME as INIT_TIME, ne0_.ACCESS_CONTROL as ACCESS_27_ from NE ne0_ where (ne0_.ACTIVATION=? )and(ne0_.EM_ID=? ) for update of this
2004-11-03 12:34:23,078 DEBUG [net.sf.hibernate.impl.BatcherImpl] preparing statement
2004-11-03 12:34:23,078 DEBUG [net.sf.hibernate.type.IntegerType] binding '1' to parameter: 1
2004-11-03 12:34:23,078 DEBUG [net.sf.hibernate.type.IntegerType] binding '21' to parameter: 2
2004-11-03 12:34:23,078 DEBUG [net.sf.hibernate.util.JDBCExceptionReporter] SQL Exception
java.sql.SQLException: ERROR: relation "this" in FOR UPDATE clause not found in FROM clause
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1187)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:990)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:138)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:347)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:294)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:209)
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:314)
at net.sf.hibernate.impl.BatcherImpl.getResultSet(BatcherImpl.java:87)
at net.sf.hibernate.loader.Loader.getResultSet(Loader.java:800)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:189)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
at net.sf.hibernate.loader.Loader.doList(Loader.java:955)
at net.sf.hibernate.loader.Loader.list(Loader.java:946)
at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:846)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1543)
at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)


Top
 Profile  
 
 Post subject:
PostPosted: Wed Nov 03, 2004 9:59 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 12:50 pm
Posts: 5130
Location: Melbourne, Australia
Please submit a runnable main method to JIRA.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.