Tôi đang đối mặt với những gì tôi nghĩ là một vấn đề đơn giản với Hibernate, nhưng không thể giải quyết nó (các diễn đàn Hibernate không thể truy cập chắc chắn không giúp ích gì).
Tôi có một lớp học đơn giản tôi muốn tiếp tục, nhưng tiếp tục nhận được:
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 ]
Mã có liên quan cho lớp kiên trì là:
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;
}
}
Và mã chạy thực tế chỉ đơn giản là:
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();
}
Tôi đã thử một số "chiến lược" trong GeneratedValue
chú thích nhưng có vẻ như nó không hoạt động. Khởi tạo id
cũng không giúp được gì! (ví dụ Long id = 20L
).
Bất cứ ai có thể làm sáng tỏ?
EDIT 2: đã xác nhận: gây rối với @GeneratedValue(strategy = GenerationType.XXX)
việc không giải quyết nó
GIẢI QUYẾT: tạo lại cơ sở dữ liệu đã giải quyết vấn đề
GenerationType
trong @GeneratedValue
từ IDENTITY
để AUTO
và nó làm việc cho tôi. Ngoài ra, bạn có thể có thuộc tính tăng tự động được đặt trong MySQL.