繁体   English   中英

Hibernate:“字段‘id’没有默认值”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM