問候..我正在嘗試將對象添加到我的 PostgreSQL 數據庫,一切正常,但是當我在數據庫中添加第二個對象時,它只會覆蓋第一個對象學生班@Entity@Table(name = "student")public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(columnDefinition="serial") private int id; @Column(name="first_name") private String firstName; @Column(name="last_name") private String lastName; @Column(name="email") private String email;public Student() { } public Student(String firstName, String lastName, String email) { this.firstName = firstName; this.lastName = lastName; this.email = email; }休眠配置文件<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> <property name="hibernate.connection.username">user1</property> <property name="hibernate.connection.password">test123</property> <property name="hibernate.connection.url">jdbc:postgresql://127.0.0.1:5432/hb_student_tracker</property> <property name="hibernate.current_session_context_class">thread</property> <property name="connection_pool_size">1</property> <property name="hbm2ddl.auto">create</property> <property name="show_sql">true</property> </session-factory></hibernate-configuration>第一個對象在數據庫中寫入正常,第二個對象將覆蓋第一個對象
1 回答

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
我認為您的問題是對 @Id 列使用原始類型。
這是 Hibernate 在 javadoc 中對方法的說法save()
;
保留給定的瞬態實例,首先分配生成的標識符。(或者,如果使用指定的生成器,則使用標識符屬性的當前值。)如果關聯是使用cascade=“save-update”映射的,則此操作會級聯到關聯的實例。
CrudRepository#save()
方法檢查數據庫中的學生 ID,第一條和第二條記錄均為 0。由于 Hibernate 發現了一條記錄并認為您沒有插入一條記錄,因此您正在更新一條 id 為 0 的記錄。
如果您確實像下面這樣修改代碼,它應該可以工作;
@Entity
@Table(name = "student")
public class Student {
? @Id
? @GeneratedValue(strategy = GenerationType.IDENTITY)
? @Column(columnDefinition="serial")
? private Integer id;
現在,Hibernate 將檢查您的 id,如果它是一條新記錄,則 id 字段將為空,因此 Hibernate 表示這是一條新記錄,應該將其作為新記錄插入。
添加回答
舉報
0/150
提交
取消