Java InvalidDataAccessResourceUsageException:无法提取结果集 简介
我继承了一个项目,正在尝试进行更改。 在我向实体添加以下字段和方法之前,web应用程序工作正常Java InvalidDataAccessResourceUsageException:无法提取结果集 简介,java,hibernate,jpa,oracle11g,Java,Hibernate,Jpa,Oracle11g,我继承了一个项目,正在尝试进行更改。 在我向实体添加以下字段和方法之前,web应用程序工作正常 @Lob @Column(name = "FIELDS") private String partnerFields; public String getPartnerFields() { return partnerFields; } public void setPartnerFields(String partnerFields) { this.partnerFields =
@Lob
@Column(name = "FIELDS")
private String partnerFields;
public String getPartnerFields() {
return partnerFields;
}
public void setPartnerFields(String partnerFields) {
this.partnerFields = partnerFields;
}
错误
添加这些后,我会出现以下错误:
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]
补充资料
代码是专有的,所以我不能全部发布,但我还可以补充,错误发生在findAll
方法调用中,该调用将规范
作为参数
1。findAll调用
引发异常的行:
return partnerRepository.findAll(PartnerSpecifications.isForSelection(selectionFilter), pageable);
这就是所谓的特定JPA方法:
2。由Hibernate显示的SQL语句
以下是SQL语句的编辑版本,其中大部分列已删除:
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 )
)
我的新实体(1对1):
@OneToOne(cascade = CascadeType.ALL, mappedBy = "partner")
private PartnerFieldsEntity partnerFieldsEntity;
@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());
}
}
Oracle 10中的
SELECT DISTINCT
需要UNION
,而CLOB
不支持此操作。您必须使用DISTINCT
的替代方法。另外,不要在WHERE
语句中包含CLOB
列。Yes。。。我检查了一下,确实有query.distinct(true)代码>。我将不加区分地试一试。您的来源::)找不到适合我的工作解决方案。可能情况不同