Mam aplikację j2ee używającą hibernacji z adnotacjami. Jak dodać adnotację do pola Id w mojej klasie pojo, aby ustawić je jako automatycznie zwiększane lub generowane automatycznie. i dodając fasolę, czy pozostawiam to pole w mojej fasoli zero?
java
hibernate
auto-increment
cedric
źródło
źródło
Zrób to w następujący sposób: -
@Id @GenericGenerator(name="kaugen" , strategy="increment") @GeneratedValue(generator="kaugen") @Column(name="proj_id") public Integer getId() { return id; }
Zamiast kaugen możesz użyć dowolnej nazwy. Działało dobrze, mogłem zobaczyć poniżej zapytania na konsoli
Hibernate: select max(proj_id) from javaproj Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?)
źródło
FYI
Użycie netbeans New Entity Classes from Database z kolumną mysql * auto_increment * tworzy atrybut z następującymi adnotacjami:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") @NotNull private Integer id;
To powodowało ten sam błąd, który mówił, że kolumna nie może być pusta, więc po prostu usunąłem anotację @NotNull, pozostawiając atrybut null i działa!
źródło
Hibernate definiuje pięć typów strategii generowania identyfikatorów:
AUTO - albo kolumna, sekwencja lub tabela tożsamości, w zależności od bazowej bazy danych
TABELA - tabela zawierająca identyfikator
TOŻSAMOŚĆ - kolumna tożsamości
SEQUENCE - sekwencja
kopia tożsamości - tożsamość jest kopiowana z innego podmiotu
Przykład użycia Table
@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;
aby uzyskać więcej informacji, sprawdź link .
źródło
Jeśli masz kolumnę numeryczną, którą chcesz automatycznie zwiększać, możesz ustawić ją
columnDefinition
bezpośrednio. Ma to tę zaletę, że schemat automatycznie generuje wartość, nawet jeśli jest używany bez hibernacji. Może to jednak sprawić, że twój kod będzie specyficzny dla bazy danych:import javax.persistence.Column; @Column(columnDefinition = "serial") // postgresql
źródło
Na wypadek, gdyby ktoś „wpadł” w to pytanie SO w poszukiwaniu strategii dla tabeli Informix, gdy PK jest typu Serial .
Odkryłem, że to działa ... jako przykład.
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "special_serial_pk") private Integer special_serial_pk;
Aby to zadziałało, upewnij się, że wykonujesz sesję.SaveOrUpdate podajesz wartość w kolumnie special_serial_pk NULL .
W moim przypadku robię HTML POST z JSON tak ...
{ "special_serial_pk": null, //<-- Field to be incremented "specialcolumn1": 1, "specialcolumn2": "I love to code", "specialcolumn3": true }
źródło
Używając netbeans New Entity Classes from Database z kolumną mysql auto_increment , tworzymy atrybut z następującym hibernate.hbm.xml: id is auto inkrement
źródło