ฉันกำลังเผชิญกับสิ่งที่ฉันคิดว่าเป็นปัญหาง่ายๆกับ Hibernate แต่ไม่สามารถแก้ไขได้ (ฟอรัม Hibernate ไม่สามารถเข้าถึงได้อย่างแน่นอนไม่ช่วยอะไร)
ฉันมีคลาสง่ายๆที่ฉันอยากจะเรียนต่อ แต่ได้รับ:
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 ]
รหัสที่เกี่ยวข้องสำหรับคลาสที่คงอยู่คือ:
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;
}
}
และรหัสที่ใช้งานจริงเป็นเพียงธรรมดา:
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();
}
ฉันลองใช้ "กลยุทธ์" บางอย่างภายในGeneratedValue
คำอธิบายประกอบ แต่ดูเหมือนจะไม่ได้ผล การเริ่มต้นid
ก็ไม่ช่วยเช่นกัน! (เช่นLong id = 20L
).
ใครช่วยส่องแสงบ้าง
แก้ไข 2:ยืนยัน: การยุ่งกับ@GeneratedValue(strategy = GenerationType.XXX)
ไม่สามารถแก้ปัญหาได้
แก้ไขแล้ว: การสร้างฐานข้อมูลใหม่ช่วยแก้ปัญหาได้
GenerationType
ใน@GeneratedValue
จากIDENTITY
ไปAUTO
และมันทำงานให้ฉัน นอกจากนี้คุณสามารถตั้งค่าคุณสมบัติการเพิ่มอัตโนมัติใน MySQL