当前位置: 首页 > 面试题库 >

使用jpa从postgres中读取byte []时,其长度几乎增加了一倍

汤跃
2023-03-14
问题内容

我有一个Image类,它具有一个byte
[]来包含实际的图像数据。我可以在我的webapp中上传并插入图片。当我尝试从JPA读取图像后显示图像时,我的byte
[]的长度始终为2x-1或2x-2,其中x是postgres
9中bytea字段的长度。显然,浏览器不会显示图片已损坏。我可以使用一些帮助来弄清楚为什么我得到的期望值是我的两倍。这是我的图像类的映射。将eclipselink与JPA
2配合使用,在Mac上点击postgres 9。

当我从数据库中选择

select *, length(bytes) from image;

我得到的长度为9765。在控制器的断点中,byte []的长度为19529,比数据库的两倍少一个字节

@Entity
@Table( name = "image" )
@SequenceGenerator( name = "IMAGE_SEQ_GEN", sequenceName = "IMAGE_SEQUENCE" )
public class Image
        extends DataObjectAbstract<Long>
{
    @Id
    @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "IMAGE_SEQ_GEN" )
    private Long key;

    @Column( name="content_type" )
    private String contentType;

    @Lob
    @Basic( optional=false )
    @Column( name="bytes" )
    private byte[] bytes;

    // constructor and getters and setters

}

pgadmin向我展示了图像表的以下内容

CREATE TABLE image
(
  "key" bigint NOT NULL,
  bytes bytea,
  content_type character varying(255),
  "version" integer,
  CONSTRAINT image_pkey PRIMARY KEY (key)
)
WITH (
  OIDS=FALSE
);

问题答案:

在PostgreSQL中,使用16进制编码将byte []发送到客户端

如果这是错误的原因,则必须查找JPA的更新。或者,您可以更改数据库服务器的配置,但以前版本更好。



 类似资料:
  • 问题内容: 我有两个过程,其中一个正在写(附加)到文件,另一个正在从文件读取。这两个进程正在同时运行,但无法通信。另一个读取器进程可能在写入器进程完成之前开始。 这种方法有效,但read()通常返回已读取零字节且无错误的信息。它们的零长度读取与非零长度读取之比很高,效率很低。 有没有办法解决?这是在POSIX文件系统上。 问题答案: 没有通信通道,就无法保证在读取正在写入的文件时,防止零字节读取甚

  • 我尝试过创建循环,比如减去用户想要购买的物品的数量,同时计算取值时的模数为0,减去用户购买的数量,但我离它还很远。 数组来自其他方法: 是商品的价格是用户购买的商品数量是用户对折扣的选择,例如,用户可以将折扣设置为2包、3包甚至无。

  • 我试图编写代码,确定是否可以通过从数组中移除一个元素来获得一个严格递增的整数数组。 我的代码适用于17种情况中的16种,但我想不出一种方法来整洁地重写我的代码,以便它考虑到一个数字比它前面的大,也比它后面的小的情况,就像我写这个for循环的方式一样。这是我的代码。这种方法不适用于数组:[1,2,3,4,3,6],因为它不像当前构造for循环那样将数组中的最后3视为违规者。 }

  • 使用spring boot jpa将经度和纬度存储为几何位置,作为Postgres中的点。 应用下面的代码后,它抛出:列“location”的类型是point,但表达式的类型是bytea。 获取抛出的数据时:无法反序列化;嵌套的异常是org。冬眠类型序列化异常:无法反序列化 在pom中添加依赖项。xml 在实体类中添加列。 用于将数据存储到数据库中 我需要在Postgres中以(30.5,53.1

  • 我将使用Apache Camel编写一个CRUD应用程序,非常像下面的示例:http://java.dzone.com/articles/rest-apache-camel 但我想使用JPA,而不仅仅是JDBC。 我看过Camel JPA组件,认为我可以使用它。但要从数据库中读取数据,它需要我定义一个消费者endpoint。 我想从JDBC示例中执行以下操作: 即调用JPA组件作为生产者。 这可能

  • 我在Google Compute Engine上创建了两个集群,这些集群读取100 GB的数据。 集群I:1个主机-15 GB内存-250 GB磁盘10个节点-7.5 GB内存-200 GB磁盘 集群II:1主-15 GB内存-250 GB磁盘150节点-1.7 GB内存-200 GB磁盘 我用它来读取文件: 另外,hadoop的复制或移动命令也很慢。数据只有100 GB。大公司如何处理太字节的数