ERROR: Duplicate entry '0' for key 'PRIMARY' , como consertar isso?

Oi pessoas, temnho esse problema aqui no netbeans, com aplicação javafx, no qual, quando vou fazer a persistencia de um objeto, usanodo Hibernate, se a lista fica vazia, ele opera normalmente, mas depois da primeira, ele retorna o seguinte erro:
ERROR: Duplicate entry ‘0’ for key ‘PRIMARY’
org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
THE ERROE IS ===>>>org.hibernate.exception.ConstraintViolationException: could not execute statement.

Como faco pra lidar com isso, parece que na parte de cadastro, ele sempre tenta começãr com id 0, mas não persiste porque já tem uma linha com id 0 no b. de dados, só não sei como resolver isso, Tem alguma coisa que possa fazer?

eis aqui o código:

public class Conectar {

public static SessionFactory Conexao() {
Configuration c = new Configuration();
c.configure();
SchemaExport sql = new SchemaExport©;
sql.create(true,false);
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(c.getProperties()).build();
return c.buildSessionFactory(sr);
}

public class AdicaoController implements Initializable {

/atributos omitidos/

 @FXML
private void criarEvento(ActionEvent event) {
    try{
       AgendaFactory ag = new AgendaFactory();
       Evento e = null;
       TempoFactory tf = new TempoFactory();
       Futuros f = ag.Futuro();
       LocalDate lc = calendar.getValue();
       Tempo t;
       EventosDao hibernate = new EventosDao();
       
       String mylocal = local.getText();
       String myname = nome.getText();
       String mydescricao  = descricao.getText();
       
           
    	int dia = lc.getDayOfMonth();//Dia em que comeca
		int mes  = lc.getMonthValue();//Mes
		int ano = lc.getYear();//Ano
		int hcomeco = horaInicial.getValue();//Hora em que come�a
		int mcomeco =  mimInicial.getValue();//minuto em que come�a
		int hfim = horaFinal.getValue();//Hora em que termina
		int mfim = minFinal.getValue();//minuto em que termina
		
          
         
t = tf.criartempo(dia, mes, ano, hcomeco, mcomeco, mfim, mfim);
//Aqui um tempo no construtor factory os atributos pedidos;
e = new Evento.BuilderEvento().setTempo(t).setNome(myname).
setLocal(mylocal).setDescricao(mydescricao).Builder();//EventoBuilder � criado
(f.adicionar(e))
  

if(hibernate.create(e)){
     ultimo.setText("SLAVO NO mYSQL"); 
}

    }catch(Exception e){
       ultimo.setText("coisa errada"); 
    }
    
}

@Entity
@Table(name = “Eventos”)
public class Evento implements Serializable{

@Id
private long id;

@GeneratedValue(strategy = GenerationType.SEQUENCE )
/atributos omitidos/

@ManyToOne
private Agenda agendados;

@OneToOne(cascade = CascadeType.ALL,
fetch = FetchType.LAZY,mappedBy = “fazerHoje”)

Entity
@Table(name = “tempodasCoisas”)
public class Tempo implements Serializable {

// @Embeddablle
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)

/atributos omitidos/

@OneToOne(cascade = CascadeType.ALL)
private Evento fazerHoje;

Olá @Laio

Esse erro ocorre pq voce esta inserindo um objeto cujo id seja 0, sendo que no banco ja em um registro com o id 0.

Faça essas alterações na sua classe e ve se da certo :slight_smile:

@Entity
@Table(name = “Eventos”)
@SequenceGenerator(name = "seq_evento_id", sequenceName = "seq_evento_id", initialValue = 1, allocationSize = 1)
public class Evento implements Serializable{

    @Id
	@GeneratedValue(generator="seq_evento_id", strategy=GenerationType.SEQUENCE)
	private Long id;

Continua dando o mesmo erro, mas qujando eu fiz a mesma coisa com a classe tempo - Evento possui tempo - apareceu o erro:
—>org.hibernate.MappingException: Could not instantiate id generator [entity-name=TEMPO.Tempo]

Certo, altera o seu id para Long ao inves de long;

estranho, apareceu esse erro;

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): EVENTOS.Evento (pasta e classe de eventos). ids dessa classe devem ser manualmente atribuidos antes de chamar save. Não entendi isso

Blz, consegui achar a solução, ainda não sei bem como - perdão, ainda estou aprendendo - , e foi minha primeira vez em persistencia de dados com algo dessa complexidade, mas ficou de acordo com o que eu queria, gerar a persistencia sem dar erros:

@Entity
@Table(name = “tempodasCoisas”)
//@SequenceGenerator(name = “seq_tempo_id”, sequenceName = “seq_tempo_id”, initialValue = Integer.MIN_VALUE, allocationSize = Integer.SIZE)
//@SequenceGenerator(name = “seq_tempo_id”, sequenceName = “seq_tempo_id”, initialValue = 1, allocationSize = 2)
//@SequenceGenerator( name = “seq_id”, sequenceName = “id”, initialValue = 1, allocationSize = 1)

public class Tempo implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private int dia , mes , ano ;
private int horaInicio , horaFim ,

@OneToOne(cascade = CascadeType.ALL)
private Evento fazerHoje;

/getters e setters omitidos/
////==============>>>>>>

@Entity
@Table(name = “Eventos”)
@SequenceGenerator(name = “seq_evento_id”, sequenceName = “seq_evento_id”, initialValue = 1, allocationSize = 1 )

public class Evento implements Serializable{
@Id
@GeneratedValue(generator=“seq_evento_id”, strategy = GenerationType.IDENTITY)

private long ID;
public String nome;
private String descricao;
private String local;

@ManyToOne
private Agenda agendados;

OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY,mappedBy = “fazerHoje”)
private Tempo tempo;

/getters e setters omitidos/
////==============>>>>>>

Engraçado que não precisei tocar na classe tempo.