Когда сущность сопоставляется с GenerationType.IDENTITY, вставка sql в базу данных h2 test будет иметь значение по умолчанию для столбца id, указывающего на последовательность.При сопоставлении с GenerationType.SEQUENCE оно не будет иметь значения по умолчанию.
Мы хотим использовать GenerationType.SEQUENCE, поскольку оно более многословно, и мы хотим показать, откуда все происходит.Во время тестирования мы наткнулись на эту проблему - при использовании @Sql для вставки скрипта во встроенную базу данных h2 мы получаем ошибку о ненулевом ограничении. Это также происходит, когда мы просто выполняем скрипт как собственный запрос.
Этого не происходит при использовании GenerationType.IDENTITY.Тот же сценарий, описанный выше, работает правильно.
Если мы используем GenerationType.SEQUENCE и передаем ему идентификатор, вызывая следующую функцию-значение, например:
INSERT INTO example (id, name) (NEXTVAL('example_id_seq'), 'test');
, сценарий будет работать без проблем..
Вот пример сопоставления вставки, в которой возникает проблема:
@Entity
@Table(schema = DbSchemas.PUBLIC, name = DbTables.Example)
public class Example implements Serializable {
private static final long serialVersionUID = -8827852720381659873L;
private static final String EXAMPLE_GENERATOR = "example_generator";
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = EXAMPLE_GENERATOR)
@SequenceGenerator(name = EXAMPLE_GENERATOR, sequenceName = DbSequences.EXAMPLE_ID_SEQUENCE, allocationSize = 1)
private Integer id;
@Column(name = "name", nullable = false)
private String name;
}
INSERT INTO public.example (name)
VALUES ('test');
o.h.engine.jdbc.spi.SqlExceptionHelper : NULL not allowed for column "ID"; SQL statement:
Я хотел бы иметь возможность вызватьвставить показанный выше для сущностей, сопоставленных с GenerationType.SEQUENCE.Вставка должна использовать и увеличивать последовательность, описанную в отображении.