Java 获取psql中的文本列值
我已经用Hibernate和Java 获取psql中的文本列值,java,hibernate,postgresql,psql,Java,Hibernate,Postgresql,Psql,我已经用Hibernate和@Lob String字段创建了简单实体。Java中的一切都很好,但是我无法使用psql或pgAdmin直接检查DB中的值 以下是DB中的定义: => \d+ user_feedback Table "public.user_feedback" Column | Type | Modifiers | Storage | Stats target | Description --------+--------+--
@Lob String
字段创建了简单实体。Java中的一切都很好,但是我无法使用psql
或pgAdmin
直接检查DB中的值
以下是DB中的定义:
=> \d+ user_feedback
Table "public.user_feedback"
Column | Type | Modifiers | Storage | Stats target | Description
--------+--------+-----------+----------+--------------+-------------
id | bigint | not null | plain | |
body | text | | extended | |
Indexes:
"user_feedback_pkey" PRIMARY KEY, btree (id)
Has OIDs: no
以下是我从select中获得的信息:
=> select * from user_feedback;
id | body
----+-------
34 | 16512
35 | 16513
36 | 16514
(3 rows)
实际的“正文”内容是所有行的“普通”文本,绝对不是这些数字
如何从psql中检索
body
列的实际值?这将把LOB 16512的内容存储在file out.txt中:
\lo_export 16512 out.txt
虽然这里通常不建议使用@Lob(数据库备份问题…)。请参阅以获取备选方案。Hibernate将值存储为
pg_largeobject
表中的越行对象,并将pg_largeobject
项的对象ID存储在表中。看
听起来您希望使用内联字节数组(bytea
)存储。如果是这样,您可能希望映射一个字节[]
字段,而不使用@Lob
注释,而不是@Lob字符串
。请注意,此更改将不向后兼容-您必须从数据库导出数据,然后删除表并使用Hibernate的新定义重新创建它
如何映射数据的选择是由Hibernate而不是PostgreSQL进行的
见相关文件: