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:
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
Vous devez vous connecter pour publier un commentaire.
SELECT DISTINCT
dans Oracle 10 nécessite unUNION
et ce n'est pas pris en charge pourCLOB
. Vous aurez à utiliser des alternatives àDISTINCT
. De plus ne comprennent pas leCLOB
colonne dansWHERE
consolidés.query.distinct(true);
. Je vais essayer sans distinctes. Source: forum.printemps.io/forum/printemps-projets/data/... 🙂Pas trouvé de solution qui fonctionne pour moi. Peut scénario est différent
OriginalL'auteur ChrisGeo