[英]Hibernate: “Field 'id' doesn't have a default value”
当我尝试使用 Java JPA 映射插入数据时,项目工作正常,但在使用 .hbm.xml 映射时出现此错误:
Hibernate: insert into mytable (name, pwd) values (?, ?)
Oct 14, 2020 6:22:07 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper
ERROR: Field 'id' doesn't have a default value
could not execute statement
.hbm.xml 项目代码:
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name = "com.Hibernet.HibernetUsingMaven2.Person" table = "mytable">
<meta attribute = "class-description">
This class contains the person detail.
</meta>
<id name = "id" type = "int" column = "id">
<generator class="native"/>
</id>
<property name = "name" column = "name" type = "string"/>
<property name = "pwd" column = "pwd" type = "string"/>
</class>
</hibernate-mapping>
项目Java代码:
public static void main( String[] args )
{
Person person1=new Person();
person1.setPwd("Jagbir Singh");
person1.setId(3);
person1.setName("jagbir singh");
Configuration con=new Configuration();
con.configure();
SessionFactory sf=con.buildSessionFactory();
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
session.save(person1);
tx.commit();
session.close();
}
这与映射无关,而与 SQL 端的数据定义有关。 换句话说, CREATE TABLE
语句。 您没有费心为id
字段指定默认值,并且它不能为空,因此,您使用的 SQL Server 告诉您 INSERT 语句不能按写入的方式执行,因为它违反了约束( id
字段没有值,它必须有一个)。
修复方法是折腾数据库,修复CREATE TABLE 语句,或者使用ALTER TABLE
语句。 很可能您的意图是让id
成为自动序列主键样式字段,在这种情况下,完全删除表并重新创建它肯定更简单。 如果你不能,创建一个序列,添加一个约束——我不能给你具体细节,因为每个数据库引擎对于如何正确执行此操作都有一些不同的语法。
Hibernate 可以为您生成 CREATE TABLE 语句,但通常不建议这样做(它在实践中不起作用;有时您想稍微迁移数据结构,添加列等,而您不能与“这里是一个 java 类;请创建一个看起来像它的表”的概念真的很押韵) - 请注意,hibernate 自己建议不要这样做。
如果您需要有关创建表内容的帮助,请使用适当的标签(例如postgresql
)提出一个新的 SO 问题,然后粘贴您拥有的 CREATE TABLE 语句以及以下问题:“我如何使id
字段成为主要字段键和自动计数”。 或者只是在网上搜索,这是一项非常常见的任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.