I have a similar problem to the original poster after upgrading from 3.0.1 to 3.1.2. I am using PostgresQL 8.1 on Windows XP Pro.
The exception generated is
Code:
org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not execute query; SQL [select distinct event0_.event_id as event1_32_0_, eventcrite1_.criterion_id as criterion1_17_1_, event0_.event_date as event3_32_0_, event0_.start_time as start4_32_0_, event0_.end_time as end5_32_0_, event0_.title as title32_0_, event0_.description as descript7_32_0_, event0_.last_updated as last8_32_0_, event0_.reminder_date as reminder9_32_0_, event0_.reminder_time as reminder10_32_0_, event0_.reminder_sent as reminder11_32_0_, event0_.lock_event as lock12_32_0_, event0_.club_id as club13_32_0_, event0_.venue_id as venue14_32_0_, event0_1_.meet_time as meet2_34_0_, event0_1_.home_game as home3_34_0_, event0_1_.oppo_club_id as oppo4_34_0_, event0_1_.oppo_team_id as oppo5_34_0_, event0_1_.team_id as team6_34_0_, event0_1_.fixture_type as fixture7_34_0_, event0_.type as type32_0_, eventcrite1_.participatory as particip2_17_1_, eventcrite1_.intersection_only as intersec3_17_1_, eventcrite1_.event_id as event4_17_1_, eventcrite1_.player_group_id as player5_17_1_, eventcrite1_.position_group_id as position6_17_1_ from hbm_events event0_ left outer join hbm_fixtures event0_1_ on event0_.event_id=event0_1_.event_id inner join hbm_event_criteria eventcrite1_ on event0_.event_id=eventcrite1_.event_id where (eventcrite1_.player_group_id in (? , ? , ? , ? , ? , ?)) and (eventcrite1_.position_group_id in (? , ? , ? , ? , ? , ? , ? , ?)) and event0_.event_date>=? and event0_.event_date<=? and (event0_.club_id in (?)) order by event0_.event_date]; No value specified for parameter 17.; nested exception is org.postgresql.util.PSQLException: No value specified for parameter 17.org.postgresql.util.PSQLException: No value specified for parameter 17.
at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:134)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:179)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:430)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:346)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:250)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
at org.hibernate.loader.Loader.doQuery(Loader.java:662)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1129)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
Code:
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql=false
hibernate.jdbc.batch_size=15
hibernate.default_batch_fetch_size=16
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_query_cache=true
hibernate.cglib.use_reflection_optimizer=false
An abridged section of the mapping document is:
Code:
<class name="Event" table="hbm_events" discriminator-value="event">
<id name="id" column="event_id" type="java.lang.Long">
<generator class="increment"/>
</id>
<discriminator column="type" type="string"/>
<set name="eventCriteria" cascade="save-update,lock,evict">
<key column="event_id"/>
<one-to-many class="uk.co.mindfruit.coreweb.domain.EventCriterion"/>
</set>
<!-- properties omitted for brevity -->
<many-to-one name="club" class="uk.co.mindfruit.coreweb.domain.Club" column="club_id" cascade="lock,evict" />
<subclass name="Fixture" discriminator-value="fixture">
<meta attribute="generated-class" inherit="false">uk.co.mindfruit.coreweb.domain.HbmFixture</meta>
<join table="hbm_fixtures">
<key column="event_id"/>
<!-- properties omitted for brevity -->
</join>
</subclass>
</class>
<class name="EventCriterion" table="hbm_event_criteria">
<id name="id" column="criterion_id" type="java.lang.Long">
<generator class="increment"/>
</id>
<property name="participatory" type="boolean"/>
<many-to-one name="event" class="uk.co.mindfruit.coreweb.domain.Event" column="event_id" cascade="none"/>
<many-to-one name="playerGroup" class="uk.co.mindfruit.coreweb.domain.PlayerGroup" column="player_group_id" cascade="none"/>
<many-to-one name="positionGroup" class="uk.co.mindfruit.coreweb.domain.PositionGroup" column="position_group_id" cascade="none"/>
</class>
<class name="PlayerGroup" table="hbm_player_groups" discriminator-value="0" lazy="false">
<id name="id" column="node_id" type="java.lang.Long">
<generator class="increment"/>
</id>
<property name="name" type="string"/>
<many-to-one name="club" class="uk.co.mindfruit.coreweb.domain.Club" column="club_id" cascade="none"/>
<many-to-one name="sport" class="uk.co.mindfruit.coreweb.domain.SportType" column="sport_id" cascade="none"/>
<set name="players" table="hbm_player_group_map" lazy="true" cascade="none">
<key column="node_id"/>
<many-to-many class="uk.co.mindfruit.coreweb.domain.Player" column="user_id" />
</set>
<subclass name="Team" discriminator-value="1">
<meta attribute="generated-class" inherit="false">uk.co.mindfruit.coreweb.domain.HbmTeam</meta>
</subclass>
</class>
<class name="PositionGroup" table="hbm_position_groups" lazy="false">
<id name="id" column="node_id" type="java.lang.Long">
<generator class="increment"/>
</id>
<many-to-one name="club" class="uk.co.mindfruit.coreweb.domain.Club" column="club_id" />
<property name="name" type="string"/>
<property name="number" type="string"/>
<many-to-one name="sport" class="uk.co.mindfruit.coreweb.domain.SportType" column="sport_id" />
<set name="players" table="hbm_position_group_map" lazy="true">
<key column="node_id"/>
<many-to-many class="uk.co.mindfruit.coreweb.domain.Player" column="user_id"/>
</set>
</class>
The query being executed is externalised as:
Code:
<query name="positionGroup.ids-and-playerGroup.ids-to-events">
<![CDATA[
select distinct event, criterion
from Event as event
join event.eventCriteria as criterion
where criterion.playerGroup.id in (:playerGroupIds)
and criterion.positionGroup.id in (:positionGroupIds)
and event.eventDate >= :startDate
and event.eventDate <= :endDate
and event.club.id in (:clubIds)
order by event.eventDate
]]>
</query>
and captured during debug from the PostgresQL JDBC driver looks like
Code:
select distinct event0_.event_id as event1_32_0_
, eventcrite1_.criterion_id as criterion1_17_1_
, event0_.event_date as event3_32_0_
, event0_.start_time as start4_32_0_
, event0_.end_time as end5_32_0_
, event0_.title as title32_0_
, event0_.description as descript7_32_0_
, event0_.last_updated as last8_32_0_
, event0_.reminder_date as reminder9_32_0_
, event0_.reminder_time as reminder10_32_0_
, event0_.reminder_sent as reminder11_32_0_
, event0_.lock_event as lock12_32_0_
, event0_.club_id as club13_32_0_
, event0_.venue_id as venue14_32_0_
, event0_1_.meet_time as meet2_34_0_
, event0_1_.home_game as home3_34_0_
, event0_1_.oppo_club_id as oppo4_34_0_
, event0_1_.oppo_team_id as oppo5_34_0_
, event0_1_.team_id as team6_34_0_
, event0_1_.fixture_type as fixture7_34_0_
, event0_.type as type32_0_
, eventcrite1_.participatory as particip2_17_1_
, eventcrite1_.intersection_only as intersec3_17_1_
, eventcrite1_.event_id as event4_17_1_
, eventcrite1_.player_group_id as player5_17_1_
, eventcrite1_.position_group_id as position6_17_1_
from hbm_events event0_
left outer join hbm_fixtures event0_1_
on event0_.event_id=event0_1_.event_id
inner join hbm_event_criteria eventcrite1_
on event0_.event_id=eventcrite1_.event_id
where (eventcrite1_.player_group_id in (51 , 53 , 60 , 61 , 50 , 52))
and (eventcrite1_.position_group_id in (32 , 51 , 30 , 21 , 50 , 20 , 52 , 22))
and event0_.event_date>=2006-03-11 +0000
and event0_.event_date<=2006-03-11 +0000
and (event0_.club_id in (?))
order by event0_.event_date;
Do note that the parameter lists for eventcrite1_.player_group_id and eventcrite1.position_group_id have been expanded correctly yet the single parameter supplied for the event0_.club_id parameter list has not been substituted.
I noticed this post on the PostgresQL-JDBC message board, and judging by the timing I guess it could easily have arisen after upgrading to H3.1.
http://archives.postgresql.org/pgsql-jd ... g00168.php
But as this query worked for me before I upgraded to H3.1.2 and now does not work, I assume that something has changed within Hibernate to cause this failure in the PostgresQL driver, if indeed that is what it is. Any ideas?
Thanks
Michael