gpt4 book ai didi

hibernate - org.hibernate.type.TextType 和 Oracle

转载 作者:行者123 更新时间:2023-11-29 11:21:42 24 4
gpt4 key购买 nike

我们使用 Hibernate 作为 JPA 提供者,我们有一个带有标记为 的大对象字段的类

@Lob
@Type( type = "org.hibernate.type.TextType" )
private String someString;

列创建为

SOMESTRING            LONG()             

这可以完美地与 PostgreSQL 和 MySQL 配合使用。持久化对象时使用 Oracle

entityManager.persist( object );

我们得到一个 org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update 异常。

删除 @Type( type = "org.hibernate.type.TextType") 注释将解决 Oracle 的问题,但会引入 PostgreSQL 的编码问题,如 Cannot store Euro-sign into LOB String property with Hibernate/PostgreSQL 中所述。

我想知道如何定义一个大的文本字段,以便程序可以在 PostgreSQL 和 Oracle 上运行。纯 JPA 解决方案将是最佳解决方案,但特定于 Hibernate 的解决方案也可以。

编辑:

真正的异常(exception):

java.sql.BatchUpdateException: ORA-22295: cannot bind more than 4000 bytes data to LOB and LONG columns in 1 statement

现在,我错过的异常解释了问题,事实上我坚持的对象有比大字符串更多的东西(至少一个长 DBID)。

最佳答案

这对我有用。像这样扩展 PostgreSQL81Dialect:

public class MyPostgreSQL81Dialect extends PostgreSQL81Dialect
{

@Override
public SqlTypeDescriptor getSqlTypeDescriptorOverride(int sqlCode)
{
SqlTypeDescriptor descriptor;
switch (sqlCode)
{
case Types.CLOB:
{
descriptor = LongVarcharTypeDescriptor.INSTANCE;
break;
}
default:
{
descriptor = super.getSqlTypeDescriptorOverride(sqlCode);
break;
}
}
return descriptor;
}

}

关于hibernate - org.hibernate.type.TextType 和 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13090089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com