InvalidDataAccessResourceUsageException: impossible d'extraire ResultSet

Intro

J'ai hérité d'un projet et suis en train de faire des changements.
L'application web fonctionne très bien jusqu'à ce que j'ajoutez le champ suivant et les méthodes de l'Entité.

@Lob
@Column(name = "FIELDS")
private String partnerFields;

public String getPartnerFields() {
    return partnerFields;
}

public void setPartnerFields(String partnerFields) {
    this.partnerFields = partnerFields;
}

Erreur

Après l'ajout de ces, j'obtiens les erreurs suivantes:

2016-05-30 15:36:40,550 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] SQL Error: 932, SQLState: 42000
2016-05-30 15:36:40,550 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] ORA-00932: inconsistent datatypes: expected - got CLOB
raised org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:172) ~[spring-orm-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:155) ~[spring-orm-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417) ~[spring-orm-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) ~[spring-tx-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) ~[spring-tx-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) ~[spring-tx-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodIntercceptor.invoke(CrudMethodMetadataPostProcessor.java:111) ~[spring-data-jpa-1.7.0.RELEASE.jar:na]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[spring-aop-4.0.7.RELEASE.jar:4.0.7.RELEASE]
at com.sun.proxy.$Proxy73.findAll(Unknown Source) ~[na:na]

Des Informations Supplémentaires

Le code est propriétaire donc je ne peux pas poster tout ça mais je peux aussi ajouter que l'erreur a lieu dans un findAll invocation de méthode qui prend un Specification comme un param.

1. findAll Invocation

Ligne où l'exception est levée:

return partnerRepository.findAll(PartnerSpecifications.isForSelection(selectionFilter), pageable);

Qui est appelé ce JPA méthode:

InvalidDataAccessResourceUsageException: impossible d'extraire ResultSet

2. Instruction SQL Affichée par Hibernate

Ci-dessous est une version modifiée de l'instruction SQL avec la plupart des colonnes supprimée:

SELECT * 
FROM   (SELECT DISTINCT partnerent0_.partner_id                 AS 
PARTNER_ID1_16_, 
...
FROM   partner partnerent0_, 
partner_id partneride1_ 
WHERE  partnerent0_.id = partneride1_.id 
AND ( partnerent0_.status IS NOT NULL ) 
AND partnerent0_.status <>? 
AND ( partneride1_.identifier LIKE ? ) 
AND ( partnerent0_.cat2016 <>?  OR partnerent0_.category_2016 IS NULL )
)

Des idées pourquoi LOB serait la cause de cette erreur?

Ma Solution Actuelle

Ma solution a été de faire une autre entité pour tenir le MÉTIER, et de faire un 1 pour 1 mapping de l'entité d'origine:

Dans mon entité d'origine:

 @OneToOne(cascade = CascadeType.ALL, mappedBy = "partner")
private PartnerFieldsEntity partnerFieldsEntity;

Ma nouvelle entité (1 à 1):

@Entity
@Table(name="PARTNER_FIELDS")
public class PartnerFieldsEntity{
@Id
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARTNER_ID", nullable = false)
private PartnerEntity partner;
@Lob
@Column(name = "FIELDS")
private String partnerFields;
public PartnerEntity getPartner() {
return partner;
}
public void setPartner(PartnerEntity partner) {
this.partner = partner;
}
public String getPartnerFields() {
return partnerFields;
}
public void setPartnerFields(String partnerFields) {
this.partnerFields = partnerFields;
}
public void setPartnerFields(PartnerFieldsWrapper projectFields) {
setPartnerFields(projectFields.toJson());
}
}

OriginalL'auteur Menelaos Bakopoulos | 2016-05-30