gpt4 book ai didi

java - hibernate MaterializedClobType 存储长对象而不是文本

转载 作者:行者123 更新时间:2023-12-01 16:51:29 25 4
gpt4 key购买 nike

我有一个实体类,其字段声明为:

    @NotNull
@Lob
private String xmlString;

现在我必须保持与OraclePostgreSQL的兼容性。 DDL 中相应的列定义是 xmlString clobxmlString text。该应用程序运行良好,只有 PostgreSQL 存在一个问题:xmlString 列中存储的值是 long object 类型,而不是原始 xml字符串。
按照建议here添加 @Type(type="org.hibernate.type.MaterializedClobType") ,它提供与 OraclePostgreSQL 的兼容性,但即使在添加之后此注释存储在PostgreSQL中的值是长对象而不是原始的xml字符串。

我所做的改变:

    @NotNull
@Lob
@org.hibernate.annotations.Type(type = "org.hibernate.type.MaterializedClobType")
private String xmlMessage;

存储在xmlString中的值是一个数字,似乎是长对象的引用ID。

是否有可能在 OraclePostgreSQL 上实现此功能?

<小时/>

如果我将注释更改为 @org.hibernate.annotations.Type(type = "org.hibernate.type.TextType"),它在 PostgreSQL 中运行良好,但是然后 Oracle 上的架构验证失败。

最佳答案

为了解决这个问题,我通过扩展 org.hibernate.dialect.PostgreSQL9Dialect 并覆盖 remapSqlTypeDescriptor 创建了自定义方言,如下所示:

    @Override
public SqlTypeDescriptor remapSqlTypeDescriptor(SqlTypeDescriptor sqlTypeDescriptor)
{
if (sqlTypeDescriptor.getSqlType() == Types.CLOB)
{
log.debug("remapping CLOB to LongVarchar");
return LongVarcharTypeDescriptor.INSTANCE;
}
return super.remapSqlTypeDescriptor(sqlTypeDescriptor);
}

有了这个,我不需要通过

注释我的实体字段
@org.hibernate.annotations.Type(type = "org.hibernate.type.MaterializedClobType")

关于java - hibernate MaterializedClobType 存储长对象而不是文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61678474/

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