Problema para salvar imagem no banco de dados, usando JPA!

Olá pessoal,

estou com um sério problema há mais de uma semana. Estou usando JPA e usando o PostgreSQL em uma aplicação desktop.

Então, tô tentando upar um arquivo de imagem (jpg), até a hora de anexar blz… mas quando vou clicar em salvar dá pau.

Estou utilizando 2 classes relacionadas a Imagem: Documentocom alguns atributos, e tal classe se relaciona com outras entidades, e outra classe que é DocumentoImagem, que é aonde vai ficar a Imagem e lá tem o campo Lob

E esses são os erros exibidos pela console, estou usando o NetBeans

SEVERE: null
javax.imageio.IIOException: Can’t read input file! (não sei o porque do arquivo não poder ser lido)

Exception occurred during event dispatching:
javax.persistence.RollbackException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b41-beta2 (03/30/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERRO: coluna "conteudo" é do tipo bytea mas expressão é do tipo oid
Error Code: 0
Call: INSERT INTO DOCUMENTOIMAGEM (CONTEUDO, imagem) VALUES (?, ?)
bind => [null, 4]

Abaixo vou deixar o mapeamento dessas 2 classes

class Documento

@Entity
public class Documento {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int codigo;

    @Temporal(TemporalType.DATE)
    private GregorianCalendar dataCadastro;

    @Temporal(TemporalType.DATE)
    private GregorianCalendar dataValidade;

    @ManyToOne
    @JoinColumn(name = "empresa")
    private Empresa empresa;

    @ManyToOne
    @JoinColumn(name = "usuario")
    private Usuario usuario;

    @ManyToMany(mappedBy = "documentos", cascade = CascadeType.ALL)
    @JoinColumn(name = "representante")
    private List<Representante> representantes = new ArrayList<Representante>();
    
    @OneToOne(mappedBy = "documento", cascade = CascadeType.ALL)
    @JoinColumn(name = "imagem")
    private DocumentoImagem documentoImagem;

    public Documento() {
    }

    public Documento(GregorianCalendar dataCadastro, GregorianCalendar dataValidade) {

        this.dataCadastro = dataCadastro;
        this.dataValidade = dataValidade;

    }

    public Documento(Empresa empresa, List<Representante> representantes, GregorianCalendar dataCadastro) {

        this.empresa = empresa;
        this.representantes = representantes;
        this.dataCadastro = dataCadastro;

    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public GregorianCalendar getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(GregorianCalendar dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public GregorianCalendar getDataValidade() {
        return dataValidade;
    }

    public void setDataValidade(GregorianCalendar dataValidade) {
        this.dataValidade = dataValidade;
    }
    
    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public List<Representante> getRepresentantes() {
        return representantes;
    }

    public void setRepresentantes(List<Representante> representantes) {
        this.representantes = representantes;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public DocumentoImagem getDocumentoImagem() {
        return documentoImagem;
    }

    public void setDocumentoImagem(DocumentoImagem documentoImagem) {
        this.documentoImagem = documentoImagem;
    }

    public void addRepresente(Representante r) {
        representantes.add(r);
    }

    @Override
    public String toString() {
        return "Código: " + this.codigo + " - Data de cadastro: " + this.dataCadastro + " - Válido até: " + this.dataValidade;
    }
}

class DocumentoImagem

@Entity
public class DocumentoImagem {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int codigo;

    @Lob
    private byte[] conteudo;

    @OneToOne
    @JoinColumn(name = "imagem")
    private Documento documento;

    public DocumentoImagem() {
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public byte[] getConteudo() {
        return conteudo;
    }

    public void setConteudo(byte[] conteudo) {
        this.conteudo = conteudo;
    }

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }
   
}

estou utilizando o seguinte código para leitura

public class Imagem {

    //A4 = 595x842 pixels
    private BufferedImage img;
    private String filename = null;

    public Imagem(String filename) throws IOException {

        this.img = ImageIO.read(new File(filename));

        this.filename = filename;
    }

    public Imagem(byte[] bytes) throws IOException {

        InputStream input = new ByteArrayInputStream(bytes);
        this.img = javax.imageio.ImageIO.read(input);
    }

    public Imagem(ImageIcon imagem) {

        Image image = imagem.getImage();
        BufferedImage buffer = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);

        Graphics2D grafico = buffer.createGraphics();
        grafico.drawImage(image, 0, 0, null);

        this.img = buffer;
    }

    public void rotacionar() {

        int width = this.img.getWidth();
        int height = this.img.getHeight();

        BufferedImage biFlip = new BufferedImage(height, width, this.img.getType());

        for (int i = 0; i < width; i++) {
            for (int j = 0; j < height; j++) {
                biFlip.setRGB(height -1 -j, i, this.img.getRGB(i, j));
            }
        }

        this.img = biFlip;
    }

    public void redimensionar(int largura, int altura) {

        BufferedImage novo = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_RGB);

        Graphics2D grafico = novo.createGraphics();

        grafico.drawImage(this.img, 0, 0, largura, altura, null);

        this.img = novo;
    }

    public byte[] toBytes() throws IOException {

        ByteArrayOutputStream buff = new ByteArrayOutputStream();

        ImageIO.write(this.img, "jpg", buff);

        return buff.toByteArray();
    }

    public ImageIcon getIcon() {

        return new ImageIcon(this.img);
    }

    public Image getImage() {

        return (Image) this.img;
    }

    public String getFilename() {

        return this.filename;
    }
}