Persist blob field with file extension - JPA, Hibernate

0

I need to persist an attachment like a pdf, xls, etc. (type blob field).

I need to recover this file after persisting it and I do not want the user to enter the file extension.

I was guided in another question to create a table only for the attachments, which I am not able to do so far. If anyone has suggestions or examples I am grateful.

Table condutor :

CREATE TABLE condutor (
    idCondutor int(11) NOT NULL AUTO_INCREMENT,
    nomeCondutor varchar(255) DEFAULT NULL,
    empresaCondutor int(11) DEFAULT NULL,
    pessoaCondutor int(11) DEFAULT NULL,
    setorCondutor int(11) DEFAULT NULL,
    statusCondutor int(11) DEFAULT NULL,
    PRIMARY KEY (idCondutor),
    KEY FK_sjtsm3daptskn3srw7oq4jahv (empresaCondutor),
    KEY FK_8nfirnssektdhna64ld08p1jg (pessoaCondutor),
    KEY FK_qyu9ky6p3myqq391d62k8aunb (setorCondutor),
    KEY FK_rp36pckj7fhy44mw625xx0494 (statusCondutor),
    CONSTRAINT FK_8nfirnssektdhna64ld08p1jg FOREIGN KEY (pessoaCondutor) REFERENCES pessoa (idPessoa),
    CONSTRAINT FK_qyu9ky6p3myqq391d62k8aunb FOREIGN KEY (setorCondutor) REFERENCES setor (idSetor),
    CONSTRAINT FK_rp36pckj7fhy44mw625xx0494 FOREIGN KEY (statusCondutor) REFERENCES status (idStatus),
    CONSTRAINT FK_sjtsm3daptskn3srw7oq4jahv FOREIGN KEY (empresaCondutor) REFERENCES empresa (idEmpresa)
)

Table condutorinfracao :

CREATE TABLE condutorinfracao (
    idCondInf int(11) NOT NULL AUTO_INCREMENT,
    anexoInfracao longblob,
    valorInfracao decimal(19,2) DEFAULT NULL,
    condutorCondInf int(11) DEFAULT NULL,
    infracaoCondInf int(11) DEFAULT NULL,
    PRIMARY KEY (idCondInf),
    KEY FK_tjm3qu2haonaki7q5u8cb949h (condutorCondInf),
    KEY FK_mcswigv97yisxqakgleui6168 (infracaoCondInf),
    CONSTRAINT FK_mcswigv97yisxqakgleui6168 FOREIGN KEY (infracaoCondInf) REFERENCES infracao (idInfracao),
    CONSTRAINT FK_tjm3qu2haonaki7q5u8cb949h FOREIGN KEY (condutorCondInf) REFERENCES condutor (idCondutor)
)

Entity Condutor :

public class Condutor implements EntidadeBase, Serializable {

    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idCondutor")
    private Integer id;

    @Column(name = "nomeCondutor")
    private String nome;

    @ManyToOne
    @JoinColumn(name = "setorCondutor")
    private Setor setor;

    @ManyToOne
    @JoinColumn(name = "pessoaCondutor")
    private Pessoa pessoa;

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

    @ManyToOne
    @JoinColumn(name = "statusCondutor")
    private Status status;

    @OneToMany(mappedBy = "condutor", cascade = CascadeType.ALL)
    private List<CondutorInfracao> condInfracoes;

    //getters e setters

}

Entity CondutorInfracao :

public class CondutorInfracao implements Serializable, EntidadeBase {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idCondInf")
    private Integer id;

    @Column(name = "valorInfracao")
    BigDecimal valor_infracao;

    @Lob
    @Column(name = "anexoInfracao")
    private byte[] anexo;

    @ManyToOne
    @JoinColumn(name = "condutorCondInf", referencedColumnName = "idCondutor")
    private Condutor condutor;

    // getters e setters

}

Save:

private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
    CondutorInfracao condutorInfracao = new CondutorInfracao();
    condutorInfracao.setCondutor((Condutor) jCCondutor.getSelectedItem());
    condutorInfracao.setInfracao((Infracao) jCInfracaoDescr.getSelectedItem());

    Locale brasil = new Locale("pt", "BR");
    NumberFormat nf = NumberFormat.getCurrencyInstance(brasil);
    String str = valorField.getText();
    Number str2 = null;
    try {
        str2 = nf.parse(str);
    } catch (ParseException ex) {
        Logger.getLogger(CondutorInfracaoView.class.getName()).log(Level.SEVERE, null, ex);
    }
    BigDecimal bd = new BigDecimal(str2.doubleValue());
    BigDecimal ajusted = bd.setScale(nf.getMaximumFractionDigits(), BigDecimal.ROUND_HALF_UP);
    condutorInfracao.setValor_infracao(ajusted);
    try {
        String path = caminho;
        FileInputStream input = null;
        File theFile = new File(path);
        input = new FileInputStream(theFile);
        byte[] bytes = IOUtils.toByteArray(input);
        condutorInfracao.setAnexo(bytes);

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Não foi possível anexar o arquivo!");
    }
    try {
        CondutorInfracaoDao ci = new CondutorInfracaoDao();
        ci.save(condutorInfracao);
        JOptionPane.showMessageDialog(null, "Gravado !");
        modelo.limpaLista();
        preencherTabela();
    } catch (Exception erro) {
        JOptionPane.showMessageDialog(null, "Erro na Gravação:" + erro);
    }

    refresh();
}
    
asked by anonymous 02.10.2015 / 19:17

0 answers