Hibernate Informix:Can';在VARCHAR工作时使用CLOB持久化实体

Hibernate Informix:Can';在VARCHAR工作时使用CLOB持久化实体,hibernate,jakarta-ee,informix,sqldatatypes,clob,Hibernate,Jakarta Ee,Informix,Sqldatatypes,Clob,我得到了一个实体,其列的类型为String。底层数据类型是VARCHAR(255)。如果我将此数据类型更改为CLOB,则在 entityManager.persist(entity); 这是stacktrace 15:31:43,253 INFO [org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl] (EJB default - 4) HHH000010: On release of batch it still conta

我得到了一个实体,其列的类型为String。底层数据类型是VARCHAR(255)。如果我将此数据类型更改为CLOB,则在

entityManager.persist(entity);
这是stacktrace

15:31:43,253 INFO  [org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl] (EJB default - 4) HHH000010: On release of batch it still contained JDBC statements
15:31:43,268 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (EJB default - 4) SQL Error: -841, SQLState: S0000
15:31:43,268 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (EJB default - 4) Name must start with a letter or '_' and contain letters, digits, or '_'.
15:31:43,268 ERROR [org.hibernate.engine.jdbc.batch.internal.BatchingBatch] (EJB default - 4) HHH000315: Exception executing batch [could not execute batch]
15:31:43,268 WARN  [com.arjuna.ats.arjuna] (EJB default - 4) ARJUNA012125: TwoPhaseCoordinator.beforeCompletion - failed for SynchronizationImple< 0:ffff968521df:1920e98e:5641ceff:adc0, org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization@ac5829a >: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute batch
...
Caused by: org.hibernate.exception.SQLGrammarException: could not execute batch
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:124)
at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.performExecution(BatchingBatch.java:122)
at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.doExecuteBatch(BatchingBatch.java:101)
at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.execute(AbstractBatchImpl.java:161)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.executeBatch(JdbcCoordinatorImpl.java:207)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:390)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:303)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:349)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1195)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404)
at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorNonTrackingImpl.beforeCompletion(SynchronizationCallbackCoordinatorNonTrackingImpl.java:109)
... 167 more
Caused by: java.sql.BatchUpdateException: Name must start with a letter or '_' and contain letters, digits, or '_'.
at com.informix.jdbc.IfxPreparedStatement.executeBatch(IfxPreparedStatement.java:3028)
at org.jboss.jca.adapters.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:1077)
at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.performExecution(BatchingBatch.java:113)
... 177 more
下面是sql代码

drop table CW_TEST;
create table CW_TEST(ID integer, TEST_COLUMN varchar(255));

drop table CW_TEST;
create table CW_TEST(ID integer, TEST_COLUMN CLOB);
第一个有效,而第二个无效

下面是debug option=true的输出

11:28:28,797 INFO  [stdout] (http-/0.0.0.0:8080-1) Hibernate: 
11:28:28,797 INFO  [stdout] (http-/0.0.0.0:8080-1)     /* insert de.lbank.frep.model.CwTest
11:28:28,797 INFO  [stdout] (http-/0.0.0.0:8080-1)         */ insert 
11:28:28,797 INFO  [stdout] (http-/0.0.0.0:8080-1)         into
11:28:28,797 INFO  [stdout] (http-/0.0.0.0:8080-1)             cw_test
11:28:28,797 INFO  [stdout] (http-/0.0.0.0:8080-1)             (TEST_COLUMN, ID) 
11:28:28,797 INFO  [stdout] (http-/0.0.0.0:8080-1)         values
11:28:28,797 INFO  [stdout] (http-/0.0.0.0:8080-1)             (?, ?)

11:28:28,829 INFO  [org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl] (http-/0.0.0.0:8080-1) HHH000010: On release of batch it still contained JDBC statements
11:28:28,829 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-/0.0.0.0:8080-1) SQL Error: -841, SQLState: S0000
11:28:28,829 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-/0.0.0.0:8080-1) Name must start with a letter or '_' and contain letters, digits, or '_'.
11:28:28,829 ERROR [org.hibernate.engine.jdbc.batch.internal.BatchingBatch] (http-/0.0.0.0:8080-1) HHH000315: Exception executing batch [could not execute batch]
11:28:28,829 WARN  [com.arjuna.ats.arjuna] (http-/0.0.0.0:8080-1) ARJUNA012125: TwoPhaseCoordinator.beforeCompletion - failed for SynchronizationImple< 0:ffff968521df:496f4a99:565d75bf:55, org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization@2c18af11 >: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute batch
11:28:28797信息[stdout](http-/0.0.0:8080-1)休眠:
11:28:28797信息[stdout](http-/0.0.0:8080-1)/*插入de.lbank.frep.model.CwTest
11:28:28797信息[标准输出](http-/0.0.0:8080-1)*/insert
11:28:28797信息[stdout](http-/0.0.0:8080-1)进入
11:28:28797信息[stdout](http-/0.0.0:8080-1)连续波测试
11:28:28797信息[stdout](http-/0.0.0:8080-1)(测试列,ID)
11:28:28797信息[stdout](http-/0.0.0:8080-1)值
11:28:28797信息[标准输出](http-/0.0.0:8080-1)(?,?)
11:28:28829信息[org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl](http-/0.0.0:8080-1)HHH000010:批发布时,它仍然包含jdbc语句
11:28:28829警告[org.hibernate.engine.jdbc.spi.SqlExceptionHelper](http-/0.0.0:8080-1)SQL错误:-841,SQLState:S0000
11:28:28829错误[org.hibernate.engine.jdbc.spi.SqlExceptionHelper](http-/0.0.0:8080-1)名称必须以字母或“u”开头,并包含字母、数字或“u”。
11:28:28829错误[org.hibernate.engine.jdbc.batch.internal.BatchingBatch](http-/0.0.0:8080-1)HH000315:执行批处理时出现异常[无法执行批处理]
11:28:28829警告[com.arjuna.ats.arjuna](http-/0.0.0:8080-1)arjuna01225:TwoPhaseCoordinator.before completion-同步失败imple<0:ffff968521df:496f4a99:565d75bf:55,org.hibernate.engine.transaction.synchronization.internal。RegisteredSynchronization@2c18af11>:javax.persistence.PersistenceException:org.hibernate.exception.sqlgrammareexception:无法执行批处理
这是我的persistence.xml:

<persistence-unit name="persistence_unit" transaction-type="JTA">
    <jta-data-source>java:jboss/datasources/INF_APPDS</jta-data-source>

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.InformixDialect" />

        <property name="hibernate.jdbc.use_streams_for_binary" value="true" />

        <property name="hibernate.show_sql" value="${STAGING.hibernate.show_sql:false}" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.use_sql_comments" value="true" />
        <property name="hibernate.jdbc.fetch_size" value="20" />
        <property name="hibernate.jdbc.batch_size" value="20" />
        <property name="hibernate.jdbc.batch_versioned_data" value="false" />


        <property name="hibernate.cache.use_query_cache" value="false" />
        <property name="hibernate.cache.use_second_level_cache" value="false" />
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
        <property name="hibernate.order_updates" value="true" />
        <property name="hibernate.generate_statistics" value="true" />
        <property name="hibernate.id.new_generator_mappings" value="true" />
    </properties>
</persistence-unit>

java:jboss/datasources/INF\u APPDS

如果出现sql语法异常,您必须检查POJO是否映射到您在DB中创建的任何表。或者你可以使用

<property name="hbm2ddl.auto" value="create"/>


如果出现sql语法异常,您必须检查POJO是否映射到您在DB中创建的任何表。或者你可以使用

<property name="hbm2ddl.auto" value="create"/>


在我看来,您在映射文件中使用的是默认的informix hibernate方言。根据本文()和链接的JIRA票证(),默认的informix hibernate方言不支持CLOB或BLOB类型


您是否已验证您使用的方言支持此功能?您尝试过这里链接的自定义方言吗?

在我看来,您在映射文件中使用的是默认的informix hibernate方言。根据本文()和链接的JIRA票证(),默认的informix hibernate方言不支持CLOB或BLOB类型



您是否已验证您使用的方言支持此功能?您是否尝试过此处链接的自定义方言?

您是如何将其更改为CLOB的?你能分享实体的代码吗?我把它改成了CLOB,删除了整个表。我将编辑我的初始帖子。您是否将
hibernate.dialogue
设置为
org.hibernate.dialogue.informixdialogue
?是的,我将在我的初始帖子中添加我的persistence.xml。检查这是否有帮助:您是如何将其更改为CLOB的?你能分享实体的代码吗?我把它改成了CLOB,删除了整个表。我将编辑我的初始帖子。您是否将
hibernate.dialogue
设置为
org.hibernate.dialogue.informixdialogue
?是的,我将向我的初始帖子添加persistence.xml。检查这是否有帮助:如您所见,我的pojo已映射到表中……此外,属性没有任何更改。我仍然得到相同的异常。但是这里您只处理两个数据类型。我们使用CLOB来处理大量数据。不管我们使用多少数据类型,即使只有一个字段,也可以存储大量数据。顺便说一下:我没有使用任何hibernate映射文件。如果这是您的假设。请测试此pojo您的使用权限。如您所见,我的pojo映射到表…此外,该属性没有任何更改。我仍然得到相同的异常。但是这里您只处理两个数据类型。我们使用CLOB来处理大量数据。不管我们使用多少数据类型,即使只有一个字段,也可以存储大量数据。顺便说一下:我没有使用任何hibernate映射文件。如果这是您的假设。请测试此pojo您的使用权。