【发布时间】:2010-10-22 17:10:29
【问题描述】:
我正面临一个我认为是 Hibernate 的简单问题,但无法解决(无法访问 Hibernate 论坛当然无济于事)。
我有一个简单的课程我想坚持,但要继续学习:
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 ]
持久化类的相关代码为:
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;
}
}
而实际运行的代码很简单:
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();
}
我在GeneratedValue 注释中尝试了一些“策略”,但它似乎不起作用。初始化id 也无济于事! (例如Long id = 20L)。
谁能解释一下?
编辑 2: 确认:搞乱@GeneratedValue(strategy = GenerationType.XXX) 并不能解决问题
已解决:重新创建数据库解决了问题
【问题讨论】:
-
使用String的构造函数的来源是什么?
-
对不起,我省略了。只需使用传递的值初始化一个字符串字段。
-
如何在数据库端生成 ID?
-
谢谢!在更改策略时,从未想过需要重新创建数据库。 :-)
-
我将
@GeneratedValue中的GenerationType从IDENTITY更改为AUTO,它对我有用。此外,您可以在 MySQL 中设置自动增量属性。
标签: java hibernate jpa persistence