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 GeneratedValue
anotasi tetapi sepertinya tidak berhasil. Inisialisasi id
juga 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
GenerationType
dalam @GeneratedValue
dari IDENTITY
ke AUTO
dan itu bekerja untuk saya. Selain itu, Anda dapat mengatur properti kenaikan otomatis di MySQL.