Bom dia pessoal,
Estou com um problema com a minha camada de persistência de uma aplicação desktop que desenvolvi. Essa aplicação foi feita sob demanda com uma série de restrições por parte do cliente: a base de dados tinha que ser SQL Server (pq os desenvolvedores que vão dar manutenção nisso depois não sabem usar outra base de dados -_-’) e é necessário gravar uma quantidade X de imagens na base de dados (eu sei que isso não é recomendado, também prefiro gravar no filesystem…mas os “desenvolvedores” não arredaram pé dessa exigência…).
O que ocorre é que, antes de ficar sabendo da necessidade de ser MS SQL Server, eu fiz a persistência em uma base de dados Postgres. Funcionou às mil maravilhas, as imagens eram gravadas em um campo bytea e no java eu referenciava com byte[]. Simples assim…no SQL Server as coisas começam a virar um pesadelo…
Criei a tabela no banco com o campo sendo do tipo image (teste tbm com varbinary e recebi o mesmo erro), não mudei a forma de representação no java (continua sendo byte[]) e a forma como eu tento persistir continua a mesma. Porém na hora de persistir, recebo um Data Truncation Exception. Qual o tipo de dados que deveria ser utilizado? E como ele deve ser mapeado no Hibernate?
Segue o mapeamento da entidade:
@Lob
@Column(name = "imagem")
private byte[] imagem;
e a forma como eu gravo a imagem no atributo antes de persistir o objeto:
files = crawler.listAllFiles(path,nomeImagem);
System.out.println(files.size());
if(!files.isEmpty()){
try {
fi = new FileInputStream(files.get(0).getAbsolutePath());
files = null;
} catch (FileNotFoundException ex) {
Logger.getLogger(CriteriaMatcher.class.getName()).log(Level.SEVERE, null, ex);
}
try {
while ((bytesRead = fi.read(buffer)) != -1) {
arrayOutputStream.write(buffer, 0, bytesRead);
}
} catch (IOException ex) {
Logger.getLogger(CriteriaMatcher.class.getName()).log(Level.SEVERE, null, ex);
}
try {
arrayOutputStream.close();
} catch (IOException ex) {
Logger.getLogger(CriteriaMatcher.class.getName()).log(Level.SEVERE, null, ex);
}
e.setImagem(arrayOutputStream.toByteArray());
}
Alguma idéia?