HIbernate + Oid

Bom dia galera,

Meu problema é o seguinte:

Utilizo o banco Postgres e tenho um campo OID mapeado como Blob no Hibernate. O campo OID é uma referência na tabela para o arquivo, que não sei aonde fica persistido na máquina de banco de dados, e meu DBA diz que não é no file system, seria aonde então (?).

O hibernate maravilhosamente carrega o arquivo para mim no servidor de aplicação, no entanto, meu DBA afirma categoricamente que não existe um comando no Postgres que busque o arquivo que está no banco remoto de qualquer outra máquina, ou seja, teria que exportá-lo primeiro para a máquina de banco de dados, para depois pegá-lo, através de rede.

Logo, se a afirmativa dele for verdadeira, o Hibernate está fazendo alguma coisa por trás que envolve rede. Fato é que de uma hora para outra as consultas e inserts nesse campo começaram a ficar extremamente lentas, minha aplicação começou a reter conexões e estourar o pool.

Segundo o DBA, a consulta na máquina de BD aos arquivos está rápida, ou seja, o problema estaria nessa parte “de rede” que estou cogitando que o Hibernate utiliza. Fato é que estou sem rumo para descobrir aonde está o problema, não tenho acesso ao banco de produção, local tudo é uma maravilha.

Alguma sugestão, afirmativa ou qualquer comentário ?

Valeus !

Bom dia,

o arquivo fica armazenado dentro da sua coluna. O Hibernate o interpreta como um array de bytes.
Em tese você poderia anotar esse campo com @Basic definindo uma estrategia LAZY, porem o Hibernate nao se comporta muito bem com essa marcação.

Uma alternativa seria você criar uma entidade logica, com dois campos: ID + CampoOID , e criar uma associacao @OneToOne com fetch type LAZY.

Exemplo:

public class EntidadePrincipal {
    ...
    @OneToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "ID")
    private EntidadeArquivo arquivo;
...
}