Saya menghadapi apa yang saya pikir merupakan masalah sederhana dengan Hibernate, tetapi tidak dapat menyelesaikannya (forum Hibernate yang tidak terjangkau tentu tidak membantu).
Saya memiliki kelas sederhana yang ingin saya pertahankan, tetapi terus dapatkan:
SEVERE: Field 'id' doesn't have a default value
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hibtest.model.Mensagem]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
[ a bunch more ]
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
[ a bunch more ]
Kode yang relevan untuk kelas yang bertahan adalah:
package hibtest.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Mensagem {
protected Long id;
protected Mensagem() { }
@Id
@GeneratedValue
public Long getId() {
return id;
}
public Mensagem setId(Long id) {
this.id = id;
return this;
}
}
Dan kode yang berjalan sebenarnya hanya:
SessionFactory factory = new AnnotationConfiguration()
.configure()
.buildSessionFactory();
{
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Mensagem msg = new Mensagem("YARR!");
session.save(msg);
tx.commit();
session.close();
}
Saya mencoba beberapa "strategi" dalam GeneratedValueanotasi tetapi sepertinya tidak berhasil. Inisialisasi idjuga tidak membantu! (misalnya Long id = 20L).
Adakah yang bisa menjelaskan?
EDIT 2: dikonfirmasi: mengacaukan @GeneratedValue(strategy = GenerationType.XXX)tidak menyelesaikannya
ASK: menciptakan kembali database memecahkan masalah
GenerationTypedalam @GeneratedValuedari IDENTITYke AUTOdan itu bekerja untuk saya. Selain itu, Anda dapat mengatur properti kenaikan otomatis di MySQL.