将实体预先填充到数据库中以进行测试

时间:2014-11-20 22:41:54

标签: java sql java-ee derby jpql

我正在开发一个Java EE 7应用程序。出于测试目的,使用某些内容填充数据库是非常有益的。 This tutorial说明了如何使用SQL文件在运行时或运行时创建数据库内容。我假设,在这个SQL文件中,我可以做这样的事情:

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

如果我的方法是正确的,我将如何提供@ElementCollection,@ OneToMany或仅实体属性的值?

1 个答案:

答案 0 :(得分:1)

如果要使用sql脚本使用测试数据预填充数据库,则必须检查JPA从@Entity类生成的架构。

例如,如果你有2 @Entity s:

@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} {2} Bar s @OneToMany相同。{ / p>