Esta é uma resposta tardia, mas para aqueles que ainda procuram uma solução, encontrei um bom artigo de Thorben Janssen no blog Thoughts on Java. A desvantagem, é específico do Hibernate, mas você parece usá-lo de qualquer maneira. Basicamente, a solução é usar atributos de tipo de dados java.sql.Blob em sua entidade
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String title;
@Lob
private Clob content;
@Lob
private Blob cover;
...
}
E então você usa o BlobProxy do Hibernate, que fornece um OutputStream. Mas dê uma olhada no artigo aqui