Je suis face à ce que je pense est un problème simple avec mise en veille prolongée, mais ne peut pas le résoudre (Hibernate forums inaccessible n'aide certainement pas).
J'ai une classe simple, j'aimerais persistent, mais reçois:
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 approprié pour la persisté classe 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 est tout simplement:
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é des "stratégies" au sein de l' GeneratedValue
d'annotation, mais il ne semble tout simplement pas de travail. L'initialisation de id
n'aide pas non plus! (par exemple, Long id = 20L
).
Quelqu'un pourrait jeter un peu de lumière?
EDIT 2: confirmé: jouer avec@GeneratedValue(strategy = GenerationType.XXX)
n'est pas le résoudre
RÉSOLU: recréer la base de données résolu le problème