2013-10-30 31 views
0

我想将文件存储到数据库表中作为byte[]。现在我有一个问题,关于将byte[]存储到postgres数据库表中与Hibernate。我有我的Entity类此实现:如何使用Hibernate将文件作为byte []存储到数据库中?

@Column 
private byte[] bytes; 

在我的数据库表也显示了byte[]数据类型byte

现在我可以在这个列中看到plaintext(在我的例子中是我想要存储在数据库中的文件名)。对于每个字节,它将重复数据库列中文件的名称。但为什么?

是否需要另一个Hibernate注释?

感谢您的帮助!

格尔茨 Marwief

+0

一般来说,将文件放入数据库是一个坏主意。 (国际海事组织,这是一个好主意,如果你需要写或更新文件交易) –

回答

3

您必须@Lob注释字段。

注:如果列自动生成的,你可能认为设置列定义与额外的注释(如MYSQL)的:

@Column(columnDefinition="LONGBLOB")//or VARBINARY(128) if you need a smaller limit 
+0

@Lob不工作。我得到异常“列是类型bytea但表达式是bigint” – Marwief

+0

请发布与原始邮件的整个堆栈跟踪。你也可以考虑删除现有的列,如果这是自动生成的。 –

+0

我必须纠正我的答案!您的解决方案的作品你有什么想法,如果一列用lob来注释,可以存储多少字节? – Marwief

0
@Column(columnDefinition = "LONGBLOB") 
private byte[] bytes; 
0

Domain

import javax.persistence.Lob; 
    @Lob 
    private byte[] image; 

Repository layer

byte[] image = getImageAsBytes(); 
    domain.setImage(image); 
    entityManager.save(domain); 

它应该起作用,至少它适合我们。没有特别的魔力

相关问题