2016-01-22 123 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

相關問題