J'utilise Hibernate 3 et Oracle 9 pour une entité dont un des champs String est trop long pour rentrer dans un VARCHAR, donc j'utilise un CLOB.

Voici le mapping Hibernate correspondant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
<hibernate-mapping>
    <class name="com.mycompany.myapp.common.vo.ActionLog" table="ACTN_LOG">
<!--...-->
        <property name="additionalInformation" type="org.springframework.orm.hibernate3.support.ClobStringType">
            <column name="ADTNL_INFO_TXT" />
        </property>
<!--...-->
    </class>
</hibernate-mapping>
Comme j'utilise le ClobStringType de Spring, ma sessionFactory Spring est définie comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<beans>
<!--...-->
        <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"/>
 
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<!--...-->
		<property name="lobHandler"><ref local="lobHandler"/>
		</property>
		<!--...-->
	</bean>
<!--...-->
</beans>
Le mapping se fait correctement mais quand j'essaie d'exécuter la requête HQL suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
select distinct actionlog from ActionLog actionlog left outer join fetch actionlog.parentActionLog actionlogactionlog left outer join fetch actionlog.action actionlogaction left outer join fetch actionlog.state actionlogstate left outer join fetch actionlog.stateCause actionlogstatecause;
J'obtiens le message d'erreur suivant, assez mystérieux:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Caused by: java.sql.SQLException: ORA-00932: inconsistent datatypes: expected - got CLOB
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
J'ai cherché cette erreur sur Google et j'ai trouvé pas mal d'occurrences mais aussi beaucoup de tatonnements (version d'oracle, mode batch, "tourne toi vers la fenêtre).

Est-ce que quelqu'un aurait une idée d'où peut venir le problème?