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

标签 java database hibernate postgresql bytea

我是 Hibernate 的新手。 我需要将文件存储在 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;
        }

table :


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

Error :

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)

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

This worked for me commenting <property name="hbm2ddl.auto">validate</property> in hibernate config file did the trick for me, however I'm confuse now about what should be the data type of column and member variable in java for storing file.

最佳答案

我假设您需要将文件内容存储到 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 Object

@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

Driver Code

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

我正在使用 Hibernate 4.3.7 和 PG 9.4.1

关于java - 如何使用 hibernate 将文件存储在postgres数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34939542/

相关文章:

java - 打印出 AttributedString

mysql - 将数组保存为字符串还是使用多个表?

java - 将实体移动到外部 jar 包后未映射的实体

java - HashMap<String[], List<int[]>> 未检测到重复值

java - 无法抗拒工作

java - 当 bean 具有带有 @Formula 注释的属性时,findRowCount 不起作用

sql - 连接两个表,然后连接第三个

java - Play Framework 异常 - 字段 .. 没有默认值

java - 为什么我收到与 JPQL 查询相关的 HibernateException(命名查询中的错误)?

java - 输入流与输出流有何不同?