Que banco vc está usando? Setou ele como auto incremento?
MaiqueL
MySQL sim esta como auto incremento.
romarcio
O erro diz que você deve setar o ID manualmente, por isso perguntei se tinha setado o banco como auto-incremento.
Posta o seu mapeamento então, da classe Tecnico
MaiqueL
romarcio:
O erro diz que você deve setar o ID manualmente, por isso perguntei se tinha setado o banco como auto-incremento.
Posta o seu mapeamento então, da classe Tecnico
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagedemo.bean;importjava.io.Serializable;importjavax.persistence.Basic;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;importjavax.persistence.NamedQueries;importjavax.persistence.NamedQuery;importjavax.persistence.Table;/** * * @author Maiquqel */@Entity@Table(name="tecnico")@NamedQueries({@NamedQuery(name="Tecnico.findAll",query="SELECT t FROM Tecnico t"),@NamedQuery(name="Tecnico.findByIdTecnico",query="SELECT t FROM Tecnico t WHERE t.idTecnico = :idTecnico"),@NamedQuery(name="Tecnico.findByNome",query="SELECT t FROM Tecnico t WHERE t.nome = :nome"),@NamedQuery(name="Tecnico.findByEmail",query="SELECT t FROM Tecnico t WHERE t.email = :email")})publicclassTecnicoimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Basic(optional=false)@Column(name="idTecnico")privateIntegeridTecnico;@Basic(optional=false)@Column(name="nome")privateStringnome;@Basic(optional=false)@Column(name="email")privateStringemail;publicTecnico(){}publicTecnico(IntegeridTecnico){this.idTecnico=idTecnico;}publicTecnico(IntegeridTecnico,Stringnome,Stringemail){this.idTecnico=idTecnico;this.nome=nome;this.email=email;}publicIntegergetIdTecnico(){returnidTecnico;}publicvoidsetIdTecnico(IntegeridTecnico){this.idTecnico=idTecnico;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}@OverridepublicinthashCode(){inthash=0;hash+=(idTecnico!=null?idTecnico.hashCode():0);returnhash;}@Overridepublicbooleanequals(Objectobject){// TODO: Warning - this method won't work in the case the id fields are not setif(!(objectinstanceofTecnico)){returnfalse;}Tecnicoother=(Tecnico)object;if((this.idTecnico==null&&other.idTecnico!=null)||(this.idTecnico!=null&&!this.idTecnico.equals(other.idTecnico))){returnfalse;}returntrue;}@OverridepublicStringtoString(){return"br.com.mnProgram.bean.Tecnico[idTecnico="+idTecnico+"]";}}
MaiqueL
packagedemo.util;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.AnnotationConfiguration;importorg.hibernate.cfg.Configuration;publicclassSessionFactoryHelper{privatestaticfinalSessionFactorysessionFactory;static{try{/* * Build a SessionFactory object from session-factory configuration * defined in the hibernate.cfg.xml file. In this file we register * the JDBC connection information, connection pool, the hibernate * dialect that we used and the mapping to our hbm.xml file for each * POJO (Plain Old Java Object). * */Configurationconfiguration=newAnnotationConfiguration();configuration.configure();sessionFactory=configuration.configure().buildSessionFactory();}catch(Throwablee){System.err.println("Error in creating SessionFactory object."+e.getMessage());thrownewExceptionInInitializerError(e);}}/* * A static method for other application to get SessionFactory object * initialized in this helper class. * */publicstaticSessionFactorygetSessionFactory(){returnsessionFactory;}publicstaticvoidmain(String[]args){System.out.println(SessionFactoryHelper.getSessionFactory());}}
A minha SessionFactory ta certa neh ???
romarcio
Pode fazer assim:
privatestaticfinalSessionFactorysessionFactory;privatestaticSessionFactorybuildSessionFactory(){try{Configurationconfiguration=newAnnotationConfiguration();returnconfiguration().buildSessionFactory();}catch(Throwablee){System.err.println("Error in creating SessionFactory object."+e.getMessage());thrownewExceptionInInitializerError(e);}}publicstaticSessiongetSession(){returnsessionFactory.openSession();}
Não é bom fazer isso:
public void create(Tecnico tecnico) {
SessionFactory sf = SessionFactoryHelper.getSessionFactory(); //Abrindo uma sessão
Session session = sf.openSession();
Transaction transaction = session.beginTransaction(); //Iniciando uma transação
session.save(tecnico);
transaction.commit();
session.close();
}
Faça isso:
public void create(Tecnico tecnico) {
//Abrindo uma sessão
Session session = SessionFactoryHelper.getSession();
Transaction transaction = session.beginTransaction(); //Iniciando uma transação
session.save(tecnico);
transaction.commit();
session.close();
}
Você precisa criar uma única SessionFactory, e a partir dela você cria varias Session.
Sobre o seu erro, não sei o que pode estar acontecendo. Se garante que o banco está auto-incremento, não sei o que pode ser.
Mas tenta trocar por @GeneratedValue(strategy = GenerationType.NATIVE)
MaiqueL
Resolvido alterei
Isso
por isso
no Hibernate.cfg.xml
Obrigado pela Ajuda…
F
Feijones
MaiqueL:
Resolvido alterei
Isso
por isso
no Hibernate.cfg.xml
Obrigado pela Ajuda…
Funcionou pra mim tb, cara! depois de 2 dias procurando uma solução!