【问题标题】:Pre-populating Entities into database for testing purposes将实体预填充到数据库中以进行测试
【发布时间】:2015-01-18 23:40:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: java sql jakarta-ee derby jpql


    【解决方案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 相同,在字符串 @ElementCollection 中有 2 个 Strings,在条形 @OneToMany 关系中有 2 个 Bars。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2012-01-12
      • 1970-01-01
      相关资源
      最近更新 更多