当前位置: 首页 > 知识库问答 >
问题:

Hibernate with Postgresql未正确加载数据类型为“text”的列的数据

屠华辉
2023-03-14

我有以下实体,正在使用liquibaseloadData

@Entity
class MyEntity {

    @Id
    private Long id;

    @Lob
    @Column(name="my_text")
    private String myText;
}

要使用liquibase加载示例数据,请使用以下csv文件。

id;my_text

1;referenceToFile

以及参考文件的内容

This is a very large text

液化酶的定义如下:

<changeSet id="123455-1-data" author="user">
    <loadData
              file="config/liquibase/data/myentity.csv"
              separator=";"
              tableName="myentity">
        <column name="id" type="numeric"/>
        <column name="my_text" type="blob"/>
    </loadData>
</changeSet>

然而,当使用hibernate加载数据时,我遇到以下错误。

Caused by: org.hibernate.exception.DataException: could not execute query
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:118)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
    at org.hibernate.loader.Loader.doList(Loader.java:2692)
    at org.hibernate.loader.Loader.doList(Loader.java:2672)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2506)
    at org.hibernate.loader.Loader.list(Loader.java:2501)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:395)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1507)
    at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505)
    at org.hibernate.query.Query.getResultList(Query.java:132)
    at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:74)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:306)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:73)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:359)
    at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:200)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:644)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:608)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$invoke$3(RepositoryFactorySupport.java:595)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:595)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
    ... 165 common frames omitted
Caused by: org.postgresql.util.PSQLException: Bad value for type long : This is a very large text
    at org.postgresql.jdbc.PgResultSet.toLong(PgResultSet.java:2873)
    at org.postgresql.jdbc.PgResultSet.getLong(PgResultSet.java:2099)
    at org.postgresql.jdbc.PgResultSet.getClob(PgResultSet.java:459)
    at org.postgresql.jdbc.PgResultSet.getClob(PgResultSet.java:445)
    at com.zaxxer.hikari.pool.HikariProxyResultSet.getClob(HikariProxyResultSet.java)
    at org.hibernate.type.descriptor.sql.ClobTypeDescriptor$1.doExtract(ClobTypeDescriptor.java:44)
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243)
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:329)
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3010)
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1746)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1672)
    at org.hibernate.loader.Loader.getRow(Loader.java:1561)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:731)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:990)
    at org.hibernate.loader.Loader.doQuery(Loader.java:948)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340)
    at org.hibernate.loader.Loader.doList(Loader.java:2689)
    ... 196 common frames omitted

然后我发现了这个网站http://www.solewing.org/blog/2015/08/hibernate-postgresql-and-lob-string/它说postgres将文本存储在其他地方,并保留一个长引用。但liquibase似乎直接插入文本值,而不是遵循postgres的文本类型。

我的问题是如何使用liquibase为text类型正确加载数据?

共有1个答案

宋经赋
2023-03-14

我过去也有类似的问题,我用clob代替blob,它解决了我的问题

 类似资料:
  • 我试图用JOOQ生成这个简单的SQL,但由于某些原因,我无法完成。 我以为会是这样 不幸的是,MySQLDataType已被弃用()。所以我试过了 但是我得到了以下SQL,这是不合法的。 有什么提示吗?

  • 问题内容: 我们有一个MySQL InnoDB表,其中包含约10列由base64编码的小型javascript文件和由base64编码的png(小于2KB大小)图像。 插入的次数很少,但读取次数却很多,但是输出会在Memcached实例上缓存几分钟,以避免后续的读取。 现在,我们正在使用这些列,但是我想知道在性能或快照备份方面切换到数据类型是否有优势。 我的搜索挖掘表明,和我的情况接近相同的,因为

  • 我在将css表单加载到spring webapp的浏览器中时遇到问题-我不断遇到以下错误: 样式表http://localhost:8080/MyBudget/resources/css/hello.css未加载,因为其MIME类型“text/html”不是“text/css”。 文件结构 在我的网站上。xml文件,我已指定我的资源如下; 在我看来(. JSP),我引用的css文件如下: 我已经尽

  • 我试图用时间序列创建一个简单的折线图。问题是androidplot没有正确显示数组中的时间值,即日期已关闭。日期应为: 2001年1月1日、2001年2月1日、2001年3月1日、2001年4月1日、2001年5月1日 但我得到了: 2001年1月1日、2001年1月30日、2001年3月1日、2001年3月31日、2001年5月1日 您可以从格式化的调试信息中看到androidplot解释了什么

  • 问题内容: 当我从CSV文件读回数据时,每个单元格都被解释为字符串。 如何自动将读取的数据转换为正确的类型? 或者更好:我如何告诉csv阅读器每列的正确数据类型? (我写了一个二维列表,其中每一列属于不同类型(bool,str,int,整数列表),输出到CSV文件中。) 样本数据(在CSV文件中): 问题答案: 如文档所述,CSV阅读器不会执行自动数据转换。您具有QUOTE_NONNUMERIC格

  • 下面提供了一个POJO,