Как вставить тестовые данные в H2, используя последовательность для значения по умолчанию, когда у объекта Hibernate есть GenerationType.SEQUENCE - PullRequest
0 голосов
/ 05 февраля 2019

Когда сущность сопоставляется с 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.Вставка должна использовать и увеличивать последовательность, описанную в отображении.

...