Para que uma entidade persista um arquivo binário no banco de dados, basta que a coluna seja mapeada com o tipo byte[] e a anotação @Lob, como no exemplo abaixo:
@Entity
public class Attachment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Basic(nullable=false)
private String fileName;
@Lob
private byte[] content;
// getters and setters
}
O problema que encontrei nesta configuração básica, é que o tipo da coluna gerada pelo export do Hibernate, é BLOB. Este tipo está limitado a apenas 64K (65.536 bytes) no MySQL. Para aumentar este limite, foi preciso especificar um tipo DDL (específico por Banco de Dados). Que ficou assim:
@Lob
@Column(columnDefinition="MEDIUMBLOB")
private byte[] content;
Este tipo está limitado a 16 MBytes (16.777.216 bytes), o que no meu caso é mais do que o suficiente :)
[]'s!