Saya memiliki aplikasi j2ee menggunakan hibernate dengan penjelasan. Bagaimana cara membuat anotasi bidang Id di kelas pojo saya untuk menyetelnya sebagai kenaikan otomatis atau dibuat otomatis. dan dalam menambahkan kacang apakah saya membiarkan bidang itu di kacang saya null?
java
hibernate
auto-increment
cedric
sumber
sumber
Lakukan sebagai berikut: -
@Id @GenericGenerator(name="kaugen" , strategy="increment") @GeneratedValue(generator="kaugen") @Column(name="proj_id") public Integer getId() { return id; }
Anda dapat menggunakan nama sembarang selain kaugen. Ini bekerja dengan baik, saya bisa melihat kueri di bawah ini di konsol
Hibernate: select max(proj_id) from javaproj Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?)
sumber
FYI
Menggunakan Netbeans Kelas Entitas Baru dari Database dengan kolom mysql * auto_increment *, membuat Anda atribut dengan anotasi berikut:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") @NotNull private Integer id;
Ini membuat saya mendapatkan kesalahan yang sama yang mengatakan kolom tidak boleh null, jadi saya cukup menghapus anotasi @NotNull meninggalkan atribut null, dan berhasil!
sumber
Hibernate mendefinisikan lima jenis strategi pembuatan pengenal:
AUTO - baik kolom identitas, urutan atau tabel tergantung pada DB yang mendasarinya
TABLE - tabel berisi id
IDENTITAS - kolom identitas
SEQUENCE - urutan
salinan identitas - identitas disalin dari entitas lain
Contoh menggunakan Tabel
@Id @GeneratedValue(strategy=GenerationType.TABLE , generator="employee_generator") @TableGenerator(name="employee_generator", table="pk_table", pkColumnName="name", valueColumnName="value", allocationSize=100) @Column(name="employee_id") private Long employeeId;
untuk lebih jelasnya, periksa tautannya .
sumber
Jika Anda memiliki kolom numerik yang ingin Anda tambahkan secara otomatis, ini mungkin opsi untuk disetel
columnDefinition
secara langsung. Ini memiliki keuntungan, bahwa skema menghasilkan nilai secara otomatis meskipun digunakan tanpa hibernasi. Ini mungkin membuat kode Anda spesifik untuk db:import javax.persistence.Column; @Column(columnDefinition = "serial") // postgresql
sumber
Jika ada yang "menabrak" pertanyaan SO ini dalam mencari strategi untuk tabel Informix saat PK bertipe Serial .
Saya telah menemukan bahwa ini berfungsi ... sebagai contoh.
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "special_serial_pk") private Integer special_serial_pk;
Untuk bekerja ini pastikan ketika Anda melakukan session.SaveOrUpdate Anda mengirimkan nilai untuk kolom special_serial_pk NULL .
Dalam kasus saya, saya melakukan HTML POST dengan JSON seperti ...
{ "special_serial_pk": null, //<-- Field to be incremented "specialcolumn1": 1, "specialcolumn2": "I love to code", "specialcolumn3": true }
sumber
Menggunakan Netbeans Kelas Entitas Baru dari Database dengan kolom mysql auto_increment , membuat Anda atribut dengan hibernate.hbm.xml berikut: id is auto increment
sumber