Bom dia a todos!
to com alguns problemas, espero que possam me ajudar!
criei meu Banco de Dados no Case Studio para o PostgreSQL, to Usando Hibernate + JPA, fiz a engenharia reversa do BD pra polpar trabalho (são 73 tabelas no Meu DER), depois da engenharia reversa acrescentei o @GenericGenerator(name=“generator”, strategy=“increment”, parameters = { }) e @GeneratedValue(strategy= GenerationType.AUTO, generator=“generator”), por que to usando o NetBeans e ele nao gera as sequencias automaticas.
vai alguns problemas que to tendo:
- Sempre que tento gravar uma imagem (Byte[]) no bd aparece o seguinte erro,sendo que em qualquer outra tabela não ocorre o problema:
antes estava armazenando somente o caminho, tava tudo ok:
vai o meu codigo para a conversao de IMG para Byte[]
//inFile é o caminho para a imagem
public static byte[] imageToBytes(String inFile) {
try {
File file = new File(inFile);
FileInputStream fis = new FileInputStream(file);
byte[] bytes = new byte[(int) file.length()];
fis.read(bytes);
return bytes;
} catch (FileNotFoundException ex) {
Logger.getLogger(Imagem.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Imagem.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
- no meu DER tem algumas tabelas ManyToMany, que foram convertidas pra uma tabela composta ManyToOne, so que quando tento salva nessa tabela, ela simplesmente nao salva: eis as Annotations:
AutorPub
package Configurations.Hibernate.Mapeamento;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@GenericGenerator(name="generator", strategy="increment", parameters = { })
@Table(name = "autor_pub")
@NamedQueries({
@NamedQuery(name = "AutorPub.findAll", query = "SELECT a FROM AutorPub a"),
@NamedQuery(name = "AutorPub.findByCodAutopbl", query = "SELECT a FROM AutorPub a WHERE a.codAutopbl = :codAutopbl")})
public class AutorPub implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator="generator")
@Basic(optional = false)
@Column(name = "cod_autopbl")
private Integer codAutopbl;
@JoinColumn(name = "cod_publicacao", referencedColumnName = "cod_publicacao")
@ManyToOne(optional = false)
private Publicacao publicacao;
@JoinColumn(name = "cod_autor", referencedColumnName = "cod_autor")
@ManyToOne(optional = false)
private Autor autor;
//Setters and Getters
}
Mapeamento Autor:
package Configurations.Hibernate.Mapeamento;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@GenericGenerator(name="generator", strategy="increment", parameters = { })
@Table(name = "autor")
@NamedQueries({
@NamedQuery(name = "Autor.findAll", query = "SELECT a FROM Autor a"),
@NamedQuery(name = "Autor.findByCodAutor", query = "SELECT a FROM Autor a WHERE a.codAutor = :codAutor"),
@NamedQuery(name = "Autor.findByNome", query = "SELECT a FROM Autor a WHERE a.nome = :nome"),
@NamedQuery(name = "Autor.findBySobrenome", query = "SELECT a FROM Autor a WHERE a.sobrenome = :sobrenome"),
@NamedQuery(name = "Autor.findByObservacao", query = "SELECT a FROM Autor a WHERE a.observacao = :observacao")})
public class Autor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator="generator")
@Basic(optional = false)
@Column(name = "cod_autor")
private Integer codAutor;
@Column(name = "nome")
private String nome;
@Column(name = "sobrenome")
private String sobrenome;
@Column(name = "observacao")
private String observacao;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "autor")
private List<AutorPub> autorPubList;
//Setters and Getters
}
Publicação:
package Configurations.Hibernate.Mapeamento;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@GenericGenerator(name="generator", strategy="increment", parameters = { })
@Table(name = "publicacao")
@NamedQueries({
@NamedQuery(name = "Publicacao.findAll", query = "SELECT p FROM Publicacao p"),
@NamedQuery(name = "Publicacao.findByCodPublicacao", query = "SELECT p FROM Publicacao p WHERE p.codPublicacao = :codPublicacao"),
@NamedQuery(name = "Publicacao.findByTitulo", query = "SELECT p FROM Publicacao p WHERE p.titulo = :titulo"),
@NamedQuery(name = "Publicacao.findByTopico", query = "SELECT p FROM Publicacao p WHERE p.topico = :topico"),
@NamedQuery(name = "Publicacao.findByAno", query = "SELECT p FROM Publicacao p WHERE p.ano = :ano"),
@NamedQuery(name = "Publicacao.findByEdicao", query = "SELECT p FROM Publicacao p WHERE p.edicao = :edicao"),
@NamedQuery(name = "Publicacao.findByVolume", query = "SELECT p FROM Publicacao p WHERE p.volume = :volume"),
@NamedQuery(name = "Publicacao.findByPaginas", query = "SELECT p FROM Publicacao p WHERE p.paginas = :paginas"),
@NamedQuery(name = "Publicacao.findByCdd", query = "SELECT p FROM Publicacao p WHERE p.cdd = :cdd"),
@NamedQuery(name = "Publicacao.findByAssunto", query = "SELECT p FROM Publicacao p WHERE p.assunto = :assunto"),
@NamedQuery(name = "Publicacao.findByExemplar", query = "SELECT p FROM Publicacao p WHERE p.exemplar = :exemplar"),
@NamedQuery(name = "Publicacao.findByPreco", query = "SELECT p FROM Publicacao p WHERE p.preco = :preco"),
@NamedQuery(name = "Publicacao.findByDataPub", query = "SELECT p FROM Publicacao p WHERE p.dataPub = :dataPub"),
@NamedQuery(name = "Publicacao.findByNroArea", query = "SELECT p FROM Publicacao p WHERE p.nroArea = :nroArea"),
@NamedQuery(name = "Publicacao.findByCategoria", query = "SELECT p FROM Publicacao p WHERE p.categoria = :categoria")})
public class Publicacao implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator="generator")
@Basic(optional = false)
@Column(name = "cod_publicacao")
private Integer codPublicacao;
@Column(name = "titulo")
private String titulo;
@Column(name = "topico")
private Integer topico;
@Column(name = "ano")
private Integer ano;
@Column(name = "edicao")
private String edicao;
@Column(name = "volume")
private String volume;
@Column(name = "paginas")
private Integer paginas;
@Column(name = "cdd")
private String cdd;
@Column(name = "assunto")
private String assunto;
@Column(name = "exemplar")
private String exemplar;
@Column(name = "preco")
private Double preco;
@Column(name = "data_pub")
@Temporal(TemporalType.DATE)
private Date dataPub;
@Column(name = "nro_area")
private String nroArea;
@Column(name = "categoria")
private String categoria;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "publicacao")
private List<AutorPub> autorPubList;
@JoinColumn(name = "cod_municipio", referencedColumnName = "cod_municipio")
@ManyToOne(optional = false)
private Municipio municipio;
@JoinColumn(name = "cod_modoaquisicao", referencedColumnName = "cod_modoaquisicao")
@ManyToOne(optional = false)
private ModoAquisicao modoAquisicao;
@JoinColumn(name = "cod_editora", referencedColumnName = "cod_editora")
@ManyToOne(optional = false)
private Editora editora;
@JoinColumn(name = "cod_classificacao", referencedColumnName = "cod_classificacao")
@ManyToOne(optional = false)
private ClassificPub classificPub;
@JoinColumn(name = "cod_areaespecifica", referencedColumnName = "cod_areaespecifica")
@ManyToOne(optional = false)
private AreaEspecifica areaEspecifica;
@JoinColumn(name = "cod_area", referencedColumnName = "cod_area")
@ManyToOne(optional = false)
private Area area;
//getters and Setters
}
Fiz de tudo quanto eh jeito, criei uma lista de AutorPub e depois inseri em Publicacao, gravei a Publicacao depois peguei a sua PK e Joguei em AutorPub e coloquei os autores disponiveis:
essa é a ultima coisa que tentei:
Publicacao obj = new Publicacao();
if (!textFieldCodigo.getText().isEmpty()) {
obj.setCodPublicacao(Integer.parseInt(textFieldCodigo.getText()));
}
obj.setTitulo(textFieldTitulo.getText());
obj.setAno(Integer.parseInt(textFieldAno.getText()));
obj.setPaginas(Integer.parseInt(textFieldAno.getText()));
obj.setDataPub(Util.Utilitarios.toSQLDate(this.textFieldData.getText()));
//obj.setPreco(Double.parseDouble(textFieldPreco.getName().replace(",", ".")));
obj.setVolume(textFieldVolume.getText());
obj.setExemplar(textFieldExemplar.getText());
obj.setEdicao(textFieldEdicao.getText());
obj.setCdd(textFieldCDD.getText());
obj.setCategoria(textFieldCategoria.getText());
obj.setEditora((Editora) ConsultasCriteria.getRecord(Editora.class, comboNewEditora.getSelectedString(), "editora"));
obj.setArea((Area) ConsultasCriteria.getRecord(Area.class, comboNewArea.getSelectedString(), "area"));
obj.setAreaEspecifica((AreaEspecifica) ConsultasCriteria.getRecord(AreaEspecifica.class, comboNewAreaEspecifica.getSelectedString(), "areaEspecifica"));
obj.setMunicipio((Municipio) ConsultasCriteria.getRecord(Municipio.class, comboNewLocal.getSelectedString(), "municipio"));
obj.setClassificPub((ClassificPub) ConsultasCriteria.getRecord(ClassificPub.class, comboNewClassificacao.getSelectedString(), "classificacao"));
obj.setModoAquisicao((ModoAquisicao) ConsultasCriteria.getRecord(ModoAquisicao.class, comboNewModoAquisicao.getSelectedString(), "modoAquisicao"));
obj.setAssunto(this.textAreaAssunto.getText());
GenericDAO daoSalvarPublicacao = new GenericDAO();
daoSalvarPublicacao.setObject(obj);
daoSalvarPublicacao.salvaOuAtualiza();
List <AutorPub> autorPublicacoes = new ArrayList();
Publicacao pub = (Publicacao) HibernateUtil
.getSession()
.getNamedQuery("Publicacao.findByTitulo")
.setString("titulo" ,textFieldTitulo.getText()).toList().get(0);
for (Autor aut : autoresAtuais) {
AutorPub autorPublicacao = new AutorPub();
autorPublicacao.setAutor(aut);
autorPublicacao.setPublicacao(pub);
autorPublicacoes.add(autorPublicacao);
GenericDAO gDAO = new GenericDAO();
gDAO.setObject(autorPublicacao);
gDAO.salvaOuAtualiza();
}
}
E simplesmente não salva…
alguem pode dar uma ajudinha!
Obrigado desde já!