C'est une réponse tardive, mais pour ceux qui recherchent encore une solution, j'ai trouvé un bon article de Thorben Janssen sur le blog Thoughts on Java. L'inconvénient, c'est spécifique à Hibernate, mais vous semblez l'utiliser quand même. Fondamentalement, la solution consiste à utiliser les attributs de type de données java.sql.Blob dans votre entité
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String title;
@Lob
private Clob content;
@Lob
private Blob cover;
...
}
Et puis vous utilisez le BlobProxy d'Hibernate, qui fournit un OutputStream. Mais jetez un oeil à l'article ici