Oi David,
Dá para fazer de ambas as formas que você comentou.
Por exemplo, com um modelo "Usuário" que identificação, nome e foto. Armazenaremos uma imagem na propriedade de foto do Usuário e a mapearemos para um BLOB:
@Entity
@Table(name="user")
public class User {
@Id
private String id;
@Column(name = "name", columnDefinition="VARCHAR(128)")
private String name;
@Lob
@Column(name = "photo", columnDefinition="BLOB")
private byte[] photo;
// ...
}
A anotação @Lob especifica que o banco de dados deve armazenar a propriedade como um Objeto Grande . O columnDefinition na anotação @Column define o tipo de coluna para a propriedade.
Como vamos salvar a matriz de bytes , estamos usando BLOB.
Criando a instância de Usuário:
User user = new User();
InputStream inputStream = this.getClass()
.getClassLoader()
.getResourceAsStream("profile.png");
if(inputStream == null) {
fail("Unable to get resources");
}
user.setId("1");
user.setName("User");
user.setPhoto(IOUtils.toByteArray(inputStream));
LOB é o tipo de dados para armazenar dados de objetos grandes. Existem duas variedades de LOB, chamadas BLOB e CLOB . BLOB é para armazenar dados binários, enquanto CLOB é para armazenar dados de texto.