André Neves André Neves - 3 months ago 9
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(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

Answer

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.