java.sql.SQLException:wildfly中的列索引无效 [英] java.sql.SQLException: Invalid column index in wildfly

查看:548
本文介绍了java.sql.SQLException:wildfly中的列索引无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将jboss 7升级到wildfly 10,但有一个奇怪的错误,我不明白为什么

例外:


导致:java.sql.SQLException:无效列索引
at oracle.jdbc.driver.OraclePreparedStatement.setLongInternal(OraclePreparedStatement.java:4901)
在oracle.jdbc.driver.OraclePreparedStatement.setLong(OraclePreparedStatement.java:4888)
在oracle.jdbc.driver.OraclePreparedStatementWrapper.setLong(OraclePreparedStatementWrapper.java:206)
在com.mchange.v2.c3p0 .impl.NewProxyPreparedStatement.setLong(NewProxyPreparedStatement.java:703)
位于org.hibernate.type.descriptor.sql.BigIntTypeDescriptor $ 1.doBind(BigIntTypeDescriptor.java:46)
位于org.hibernate.type。 descriptor.sql.BasicBinder.bind(BasicBinder.java:73)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:257)
a t org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:252)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrateId(AbstractEntityPersister.java:2636)
at org.hibernate.persister .entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2604)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2883)

它看起来像hibernate试图转换数据类型为wildfly使用更新版本的hibernate



生成的sql,它工作正常,当我直接运行在oracle上:


处理CreateProvisiningBaseServiceImpl时出错:org.springframework.orm.hibernate3.HibernateJdbcException:Hibernate数据访问的JDBC异常:SQLException for SQL [插入到NE_NOTIFICATION_INPUT(CREATION_DATE,FILE_NAME,INPUT_TYPE,INPUT_ID)值(?,?,'NotificationInput' ,?)]; SQL状态[99999];错误代码[17003];无法插入:[com.ericsson.enk.ne.db.model.NotificationInput];嵌套异常是org.hibernate.exception.GenericJDBCException:无法插入:[com.ericsson.enk.ne.db.model.NotificationInput]




还有一些奇怪的东西。当我删除表格时,错误不会改变。但是,当我删除序列时,错误会发生变化,并表示它无法找到序列。



序列的Java代码如下:


  @Id 
@Column(name =INPUT_ID,nullable = false)
@GeneratedValue(strategy = GenerationType。 SEQUENCE,generator =inputSequence)
@SequenceGenerator(name =inputSequence,sequenceName =SEQ_INPUT_ID,allocationSize = 1)
public long getInputId(){
return inputId;
}



解决方案

<我把问题缩小到了JPA。看起来问题与JPA从2.0升级到2.1有关。如下所述,Discriminator映射应该更新为insertable = false,updatable = false注释


<插入扩展实体无效列索引>

I upgraded jboss 7 to wildfly 10 but there is a strange error which I couldn't understand why

The exception:

Caused by: java.sql.SQLException: Invalid column index at oracle.jdbc.driver.OraclePreparedStatement.setLongInternal(OraclePreparedStatement.java:4901) at oracle.jdbc.driver.OraclePreparedStatement.setLong(OraclePreparedStatement.java:4888) at oracle.jdbc.driver.OraclePreparedStatementWrapper.setLong(OraclePreparedStatementWrapper.java:206) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setLong(NewProxyPreparedStatement.java:703) at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:46) at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:73) at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:257) at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:252) at org.hibernate.persister.entity.AbstractEntityPersister.dehydrateId(AbstractEntityPersister.java:2636) at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2604) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2883)

It looks like hibernate is trying to convert datatype as wildfly is using newer version of hibernate

Generated sql which works fine when I run directly on oracle:

Error in processing CreateProvisiningBaseServiceImpl: org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access: SQLException for SQL [insert into NE_NOTIFICATION_INPUT (CREATION_DATE, FILE_NAME, INPUT_TYPE, INPUT_ID) values (?, ?, 'NotificationInput', ?)]; SQL state [99999]; error code [17003]; could not insert: [com.ericsson.enk.ne.db.model.NotificationInput]; nested exception is org.hibernate.exception.GenericJDBCException: could not insert: [com.ericsson.enk.ne.db.model.NotificationInput]

There is also something weird. When I remove the table, the error doesnt change. But when I remove the sequence, the error changes and says it cannot find sequence.

Java code for sequence is below:

@Id
@Column(name = "INPUT_ID", nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "inputSequence")
@SequenceGenerator(name = "inputSequence", sequenceName = "SEQ_INPUT_ID", allocationSize = 1)
public long getInputId() {
    return inputId;
}

解决方案

I narrowed down problem to JPA. It looks like problem is related to JPA upgrade from 2.0 to 2.1. As it is stated in question below, Discriminator mapping should be updated with "insertable = false, updatable = false" annotation Error when trying to insert an extended entity: invalid column index

这篇关于java.sql.SQLException:wildfly中的列索引无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆