簡體   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