Hibernate: "Field 'id' doesn't have a default value"
        Posted  
        
            by André Neves
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by André Neves
        
        
        
        Published on 2009-04-29T22:13:58Z
        Indexed on 
            2010/05/16
            19:40 UTC
        
        
        Read the original article
        Hit count: 679
        
Hi, all. I'm facing what I think is a simple problem with Hibernate, but can't get over it (Hibernate forums being unreachable certainly doesn't help).
I have a simple class I'd like to persist, but keep getting:
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 ]
The relevant code for the persisted class is:
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;
    }
}
And the actual running code is just plain:
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();
}
I tried some "strategies" within the GeneratedValue annotation but it just doesn't seem to work. Initializing id doesn't help either! (eg Long id = 20L).
Could anyone shed some light?
EDIT 2: confirmed: messing with@GeneratedValue(strategy = GenerationType.XXX) doesn't solve it
SOLVED: recreating the database solved the problem
© Stack Overflow or respective owner