Hazırda bekletme ile ilgili basit bir sorun olduğunu düşündüğüm bir sorunla karşı karşıyayım, ancak çözemiyorum (Hazırda bekletme forumlarının erişilemez olması kesinlikle yardımcı olmuyor).
Kalmak istediğim basit bir dersim var, ancak almaya devam edin:
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 ]
Kalıcı sınıf için ilgili kod şudur:
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;
}
}
Ve gerçek çalışma kodu basittir:
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
Ek açıklamada bazı "stratejiler" denedim ama işe yaramıyor gibi görünüyor. Başlatma id
da yardımcı olmuyor! (örneğin Long id = 20L
).
Biri biraz ışık tutabilir mi?
DÜZENLEME 2: onaylandı: uğraşmak @GeneratedValue(strategy = GenerationType.XXX)
çözmez
ÇÖZÜLDÜ: veritabanını yeniden oluşturmak sorunu çözdü
GenerationType
içinde @GeneratedValue
gelen IDENTITY
için AUTO
ve benim için çalıştı. Ayrıca, MySQL'de otomatik artış özelliğini ayarlayabilirsiniz.