2016-01-22 121 views
0

我是Hibernate的新手。 我需要在postgres中存储文件,该列的数据类型为bytea。 我在网上浏览了一下这个案例的演示,但是我找不到任何东西。如何使用hibernate将文件存储在postgres数据库中?

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) 

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

这为我工作 评论<property name="hbm2ddl.auto">validate</property>在 休眠配置文件为我做的伎俩,但我现在混淆 什么应该是列和成员变量的数据类型 的Java存储文件。

+0

BYTEA在PG映射在Java中为byte []。我假设你想存储文件内容而不是参考(位置)。将该列对应的对象字段声明为byte []。将您的文件转换为字节[]并将其设置为字段值。当你保存你的对象时,文件内容将被映射到bytea列。从数据库读取数据时读取字节数组,并从字节[]重新构建文件。 –

+0

@ShireResident我做了类似的事情,但仍然收到错误。 我编辑的帖子添加了代码片段和错误。 –

+0

你可以发布NmonReportFileDaoImpl.java代码吗? –

回答

2

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

我使用Hibernate 4.3.7和9.4.1 PG

相关问题