Intento persistir un objeto en una base de datos. Sigue obteniendo 'Column ID no puede aceptar el error de valor nulo'. Mi objetivo es el siguiente:@GeneratedValue (strategy = GenerationType.AUTO) no funciona como pensaba
@Entity
public class TestTable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id = 0;
@Column(nullable=false, length=256)
private String data = "";
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
Mi persisten función:
public static synchronized boolean persistObject(Object obj){
boolean success = true;
EntityManager em = null;
EntityTransaction tx = null;
try{
em = getEmf().createEntityManager();
tx = em.getTransaction();
tx.begin();
em.persist(obj);
tx.commit();
} catch (Exception e){
success = false;
} finally{
try{
em.close();
} catch(Exception e){
//nothing
}
}
return success;
}
@Null: A continuación, acepte la respuesta (haciendo clic en la marca de verificación junto a ella) para que el cguler reciba una pequeña recompensa por ofrecerla. Hacerlo también ayuda a alentar a otros a responder bien a sus otras preguntas. –
@cguler Esto también funcionó para mí, pero no sé por qué GenerationType.Table funciona y Auto no funciona. ¿Puedes explicarme o referirme? –
@ChristianVielma el punto es que AUTO se configura de manera predeterminada como IDENTIDAD. Es posible que deba probar GenerationType.IDENTITY explícitamente y ver si funciona para ver si se trata de un problema con la configuración AUTO. Pero probablemente su configuración de db no lo admite. Sin embargo, GenerationType.TABLE crea una tabla y la usa para generar las claves, y esta configuración debería funcionar en todas las rdbms. Espero que esto ayude :) –