当前位置: 首页 > 知识库问答 >
问题:

如何使用hibernate在postgres数据库中存储文件?

诸葛雅达
2023-03-14

我刚开始冬眠。我需要在postgres中存储文件,列的数据类型是bytea。我在互联网上四处寻找这个案例的工作演示,但我找不到任何。

Hibernate映射:

<property name="fileData" type="binary">
   <column name="fileData" not-null="true" />
</property>

POJO:



    private byte[] fileData;
        public byte[] getFileData() {
            return fileData;
        }
        public void setFileData(byte[] fileData) {
            this.fileData = fileData;
        }

表:


    create table nmonData(id int, buildNumber int, path text, fileName text, fileData bytea);

错误:

org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [fileData] in table [nmondata]; found [bytea (Types#BINARY)], but expecting [binary(255) (Types#VARBINARY)]
    at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateColumnType(SchemaValidatorImpl.java:105)
    at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:92)
    at org.hibernate.tool.schema.internal.SchemaValidatorImpl.doValidation(SchemaValidatorImpl.java:50)
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:91)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:473)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    at com.psl.perf.hibernate.util.HibernateUtil.<clinit>(HibernateUtil.java:34)
    at com.psl.perf.DAO.NmonReportFileDaoImpl.save(NmonReportFileDaoImpl.java:15)
    at com.psl.perf.service.DataService.saveNmonCSV(DataService.java:249)
    at com.psl.perf.main.Main2.main(Main2.java:8)
Jan 22, 2016 12:26:18 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:postgresql://x.x.x.x:5432/perf]
Exception in thread "main" java.lang.NullPointerException
    at com.psl.perf.DAO.NmonReportFileDaoImpl.save(NmonReportFileDaoImpl.java:17)
    at com.psl.perf.service.DataService.saveNmonCSV(DataService.java:249)
    at com.psl.perf.main.Main2.main(Main2.java:8)

有人可以分享它的工作演示或链接吗?

这对我来说是有效的

共有1个答案

周越泽
2023-03-14

我假设您需要将文件内容存储到PG bytea列中。

PostgreSQL DDL

CREATE TABLE data_object
(
  obj_id bigserial NOT NULL,
  obj_name character(30),
  obj_file bytea,
  CONSTRAINT data_object_pkey PRIMARY KEY (obj_id)
)

Java对象

@Entity
@Table (name = "data_object")
public class DataObject {

    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name = "obj_id")
    private Long id;

    @Column(name = "obj_name")
    private String name;

    @Column(name = "obj_file")
    private byte[] file;

    // getters, setters, hasCode, equals, toString

驱动程序代码

byte[] data = new byte[FILE_SIZE];
// read file contents into data
DataObject obj = new DataObject();
obj.setFile(data);
// save obj using your hibernate session

我正在使用Hibernate4.3。第7页和第9.4页。1.

 类似资料:
  • 问题内容: 我已经搜索了很多有关此问题的信息,但是我没有针对我的问题找到合适的解决方案,我有以下使用Java存储文件的方法, 当我尝试运行此代码时,出现以下错误, 请帮助我。 问题答案: 将文件数据转换为字节数组并在sql语句中设置

  • 问题内容: 我需要下载存储在数据库中的文件。我认为我正确地执行了查询并称之为查询,但我不知道如何将其连接到JSF页面中的按钮。我也想知道,在将图像传递到JSF页面之前,是否必须将该图像保存在服务器的文件夹中。如果是这样,我该怎么做? 这是我用来从db返回byte []的查询: 这是一个简单的EJB,它调用该查询然后获取ID: 现在,这是令我困惑的部分,我如何才能将其与JSF页面和托管bean结合起

  • 问题内容: 我正在寻找一种将二进制数据流传输到数据库或从数据库流传输二进制数据的方法。如果可能的话,我希望使用Hibernate来完成(以与数据库无关的方式)。我发现的所有解决方案都涉及将字节数据作为byte []显式或隐式加载到内存中。我要避免它。假设我希望我的代码能够使用不超过256Mb的内存将数据库中的2GB视频(存储在BLOB列中)写入本地文件,或者以其他方式将其写入本地文件。这显然是可以

  • 几个月前,我在9.5版本中使用了postgres。我创建了一个数据库备份(使用pgadmin),并在postgres 9.6中恢复了这个备份(也使用pgadmin)。数据库工作正常,但从postgres 9.6创建备份时存在问题(目前的数据比几个月前多得多)。 我试图使用pgadmin来实现这一点,但出现了一个错误: 然后,我尝试使用以下命令行创建备份:

  • 我试图将一个几何体对象存储到我的postgist数据库中,该数据库有一个带有几何体列的表。我从另一个带有几何列的表格中得到了几何值,我打印了我之前得到的值,结果没问题。要存储几何体值,我使用下一个函数: 但我总是得到这个错误: 组织。postgresql。util。PSQLException:无法推断用于org实例的SQL类型。波斯吉斯。指向使用带有显式类型值的setObject()指定要使用的类

  • 我正在尝试在Spring Data Repository的nativeQuery中使用oracle的NVL函数。 当我在参数中传递值时,它会抛出异常如果我在“programId”中传递有效值,那么它工作正常。 例外情况: