我是 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/