André Neves André Neves - 6 months ago 18
Java Question

Hibernate: "Field 'id' doesn't have a default value"

I'm facing what I think is a simple problem with Hibernate, but can't solve 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(
at org.hibernate.exception.SQLStateConverter.convert(
[ 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;

@Inheritance(strategy = InheritanceType.JOINED)
public class Mensagem {
protected Long id;

protected Mensagem() { }

public Long getId() {
return id;

public Mensagem setId(Long id) { = id;
return this;

And the actual running code is just plain:

SessionFactory factory = new AnnotationConfiguration()

Session session = factory.openSession();
Transaction tx = session.beginTransaction();

Mensagem msg = new Mensagem("YARR!");;


I tried some "strategies" within the
annotation but it just doesn't seem to work. Initializing
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


Sometimes changes made to the model or to the ORM may not reflect accurately on the database even after an execution of SchemaUpdate.

If the error actually seems to lack a sensible explanation, try recreating the database (or at least creating a new one) and scaffolding it with SchemaExport.