gpt4 book ai didi

Hibernate 3.3.2GA 不正确地从 PostgreSQL 9.0 加载 bytea 数据并且所有类型映射都是正确的

转载 作者:行者123 更新时间:2023-11-29 11:41:03 25 4
gpt4 key购买 nike

您可能将 bytea 列映射为 Hibernate 类型的二进制文件。在 java 中,bytea 数据被适本地表示为 byte[]。

设置数据后,它会正确显示在 PostreSQL 9.0 数据库中。

例如:

            set( [ 1, 2, 0, 1, 255, 0 ] )

在正常的 SQL 查询输出中显示为:

             \x010201ff00

当 Hibernate 调用您的 java set() 例程来加载数据时,数据不正确。除第一个字节外的所有字节都更改为字节值的 ASCII 表示形式。在 set() 函数处设置断点并观察 Hibernate 调用:

           set( [ 1, 50, 48, 49, 102, 102, 48 ] )

等价于:

           set( [ 1, '2', '0', '1', 'f, 'f', '0' ] )

PostgreSQL 9.0 已将其默认 bytea 输出从 'escape' 更改为 'hex'。这(至少)混淆了 9.0 之前的 hibernate 版本。

要解决这个问题,请编辑 postgresql.conf 文件并将“bytea_output”的设置从“hex”更改为“escape”,恢复旧的输出格式。重新启动服务器。

...
#vacuum_freeze_min_age = 50000000
#vacuum_freeze_table_age = 150000000
bytea_output = 'escape' # hex, escape escape is REQUIRED BY HIBERNATE 3.3.2GA
#xmlbinary = 'base64'
#xmloption = 'content'
...

您的 sql 查询数据现在也将以更传统的八进制形式显示:

\001\002\000\001\377\000

因为十六进制更容易阅读,有人知道如何配置 Hibernate 3.3.2GA 来理解十六进制格式吗?

最佳答案

问题不在于 Hibernate 本身,而在于需要解码这些内容的 PostgreSQL JDBC 驱动程序。这是一个已知问题,例如 Perl 中的 DBD::Pg 也会发生同样的问题。

此问题已于去年 5 月在 PostgreSQL JDBC 驱动程序中修复,因此您应该能够简单地对其进行升级。请参阅:http://jdbc.postgresql.org/changes.html#version_9.0-dev800

关于Hibernate 3.3.2GA 不正确地从 PostgreSQL 9.0 加载 bytea 数据并且所有类型映射都是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868762/

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