Je suis confronté à ce que je pense être un problème simple avec Hibernate, mais je ne peux pas le résoudre (les forums Hibernate étant inaccessibles n'aide certainement pas).
J'ai une classe simple que j'aimerais persister, mais continuez à obtenir:
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 ]
Le code pertinent pour la classe persistante est:
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;
}
}
Et le code en cours d'exécution est tout simplement clair:
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();
}
J'ai essayé quelques «stratégies» dans l' GeneratedValue
annotation mais cela ne semble tout simplement pas fonctionner. L'initialisation id
n'aide pas non plus! (par exemple Long id = 20L
).
Quelqu'un pourrait-il faire la lumière?
EDIT 2: confirmé: jouer avec @GeneratedValue(strategy = GenerationType.XXX)
ne le résout pas
RESOLU: recréer la base de données a résolu le problème
GenerationType
à @GeneratedValue
partir IDENTITY
de AUTO
et cela a fonctionné pour moi. En outre, vous pouvez définir une propriété d'incrémentation automatique dans MySQL.