Предварительное заполнение сущностей в базе данных для целей тестирования

Я занимаюсь разработкой приложения Java EE 7. В целях тестирования было бы очень полезно заполнить базу данных некоторым содержанием. В этом руководстве объясняется, как создать содержимое базы данных во время выполнения или перед его использованием, используя файл SQL. Я предполагаю, что в этом файле SQL я мог бы сделать что-то вроде этого:

INSERT INTO ENTITYNAME(ENTITYATTRIBUTE1, ENTITYATTRIBUTE2, ... ENTITYATTRIBUTEN) value
    ("entityAttribute1", "entityAttribute2, ... "entityAttributeN")

Если мой подход правильный, как бы я предоставил значение атрибута @ElementCollection, @OneToMany или просто атрибута Entity?

1 ответ

Если вы хотите предварительно заполнить свою базу данных тестовыми данными с помощью сценария sql, вам придется изучить схему, сгенерированную JPA из вашего @Entity классы.

Например, если у вас есть 2 @Entitys:

@Entity
public class Foo {
    @Id int id;
    @ElementCollection Set<String> strings;
    @OneToMany(mappedBy"foo") Set<Bar> bars;
}

@Entity
public class Bar {
    @Id int id;
    @ManyToOne
    Foo foo;
}

Вы должны будете проверить сами, но сгенерированная схема может выглядеть примерно так.

create table Foo {
     id int primary key
}

create table Foo_strings {
     Foo_id int references Foo (id),
     strings varchar,
}

create table Bar {
    id int primary key,
    Foo_id references Foo(id)
}

Так что, если вы хотите создать некоторые тестовые данные в SQL, вы можете создать setup_test_data.sql лайк:

insert into Foo values (1);

insert into Foo_strings values (1, "string 1");
insert into Foo_strings values (1, "string 2");

insert into Bar values (1, 1);
insert into Bar values (2, 1);

Это было бы так же, как Foo с 2 Stringс в струнах @ElementCollection и 2 Barс в барах @OneToMany связь.

Другие вопросы по тегам