Inicjalizacja danych Spring Boot.

0

Mam encję Category o następującej postaci:

@Entity
public class Category {
    @Id
    @GeneratedValue
    private long id;

    private String description;
...
}

Mam też plik data.sql a w nim przykładowe polecenie:

INSERT INTO category (description, id) VALUES ('American',1);

Dlaczego, używając bazy danych h2, polecenie Sql nie zadziała w chwili, gdy usunę atrybut id z polecenia sql, skoro id jest automatycznie generowane? W kursie, prowadzącemu przeszły tego typu polecenia bez id. Jest to możliwe, że w chwili gdy kurs był tworzony baza danych h2 wspierała auto generację Id, a teraz już nie wspiera?

0

@GeneratedValue domyślnie Hibernate generuje IDki z globalnego generatora. Napisany insert nie zadziała bo IDki generowane są po stronie Hibernate'a. Gdyby w H2 domyślną wartością dla pola id była następna wartość z sekwencji - wtedy by zadziałało.

To, że w Hibernate ma ustawione @GeneratedValue wciela nie oznacza, że baza danych nagle Ci zacznie generować IDki. ORM, a baza danych / zapytanie z insertem - to dwie różne rzeczy,

Pokaż / zobacz DDL tej tabeli, a będziesz wiedział dlaczego nie działa.

0

W eclipselink działa @GeneratedValue(strategy=GenerationType.IDENTITY), w MySql ustawia AUTO_INCREMENT w definicji tabeli.

0

A H2 masz w pamięci czy na dysku? Bo jak na dysku, to może trzeba plik usunąć, żeby się tabela od nowa założyła. Może ma nieaktualny schemat.

1 użytkowników online, w tym zalogowanych: 0, gości: 1