繁体   English   中英

oracle.jdbc.driver.OraclePreparedStatement.setLongInternal 抛出无效列索引

[英]oracle.jdbc.driver.OraclePreparedStatement.setLongInternal throws invalid column index

从 Quarkus2.6.2/Hibernate5.6.1 到我们当前的 Quarkus2.8.2/Hibernate5.6.8,我们在更新我们的实体之一时收到无效的列索引错误。 相同的代码在 Quarkus1.13.7/Hibernate5.4.29 下运行没有任何问题。 我们正在使用

quarkus.datasource.db-kind=oracle
quarkus.hibernate-orm.dialect = org.hibernate.dialect.Oracle9iDialect

我的问题是,这是否是以下问题:

  1. Oracle驱动?
  2. Hibernate?
  3. 夸克斯?
  4. 我们的代码有问题吗?

这是实体:

@Entity
@Table(name = "USER_PREFERENCES")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@SequenceGenerator(name = "user_preferences_id_sequence", sequenceName = "USER_PREFERENCES_SEQ", allocationSize = 1)
public class Preferences {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_preferences_id_sequence")
    @Column(name = "ID")
    private Long id;

    @Column(name = "TYP")
    private String typ;

    @Column(name = "MODEX")
    private String modex;

    @Column(name = "JSON")
    private String json;
}

这是通过 Liquibase 创建的 DB-Table:

<createTable tableName="USER_PREFERENCES">
    <column name="ID" type="NUMBER(38,0)">
        <constraints nullable="false" primaryKey="true" />
    </column>
    <column name="MODEX" type="VARCHAR2(12)"/>
    <column name="TYP" type="VARCHAR2(100)"/>
    <column name="JSON" type="CLOB"/>
</createTable>

leading to:

ID  NUMBER(38,0)
MODEX   VARCHAR2(12 CHAR)
TYP VARCHAR2(100 CHAR)
JSON    CLOB

调用em.persist(preferences) Hibernate 在工作和非工作版本中创建以下 output:

2022-05-16 08:50:39,914 DEBUG [org.hib.SQL] (executor-thread-1)
    update
        USER_PREFERENCES
    set
        JSON=?,
        MODEX=?,
        TYP=?
    where
        ID=?
Hibernate:
    update
        USER_PREFERENCES
    set
        JSON=?,
        MODEX=?,
        TYP=?
    where
        ID=?
2022-05-16 08:50:39,918 TRACE [org.hib.typ.des.sql.BasicBinder] (executor-thread-1) binding parameter [1] as [VARCHAR] - [{"autoSearch":true,"filter":{"statusId":2,"userId":55,"testProp":"xxx"}}]
2022-05-16 08:50:39,919 TRACE [org.hib.typ.des.sql.BasicBinder] (executor-thread-1) binding parameter [2] as [VARCHAR] - [testB985B]
2022-05-16 08:50:39,921 TRACE [org.hib.typ.des.sql.BasicBinder] (executor-thread-1) binding parameter [3] as [VARCHAR] - [search_prefs]
2022-05-16 08:50:39,923 TRACE [org.hib.typ.des.sql.BasicBinder] (executor-thread-1) binding parameter [4] as [BIGINT] - [11]

在不工作的版本中,这导致

2022-05-16 09:06:51,292 DEBUG [org.hib.eng.jdb.spi.SqlExceptionHelper] (executor-thread-0) could not update: [de.my.app.preferences.entity.Preferences#11] [update USER_PREFERENCES set JSON=?, MODEX=?, TYP=? where ID=?]: java.sql.SQLException: Ung³ltiger Spaltenindex
        at oracle.jdbc.driver.OraclePreparedStatement.setLongInternal(OraclePreparedStatement.java:5005)
        at oracle.jdbc.driver.OraclePreparedStatement.setLong(OraclePreparedStatement.java:4996)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.setLong(OraclePreparedStatementWrapper.java:207)
        at io.agroal.pool.wrapper.PreparedStatementWrapper.setLong(PreparedStatementWrapper.java:148)
        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:276)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:271)
        at org.hibernate.persister.entity.AbstractEntityPersister.dehydrateId(AbstractEntityPersister.java:3121)
        at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:3093)
        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3527)
        ... 139 more

Escaping 带有反引号字符的列名将解决问题。

@Column(name = "`JSON`")
private String json;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM