生成Maven的测试数据库模式(休眠)(Generate database schema (Hibe

2019-10-17 17:40发布

我(一会儿不接触JPA后)启动了一个项目使用Hibernate 4.1,JPA2和Spring。 它是一个共同的生命周期Maven项目。

一旦运行MVN测试我得到没有找到所需的数据库对象(连接成功后如预期)的预期效果。 我所有的研究和实验,然而,事实证明还不足以使一些似乎是一个常见的情况。

  • 我希望能有行家滴/在执行单元测试,创建该模式的地方发展数据库; 我想到的是Hibernate3中,Maven的插件(3.0版最好)应对此进行处理,但我没能有工作。 我不希望任何数据自动插入(为了这个,我可以使用DBUnit的甚至更好的让每个测试生成自己的测试数据,但这在这里扮演任何作用),但我确实希望该架构可以在测试数据库上刷新,反映我的注释模型类的当前状态。 我想这会被绑定到过程检验资源的阶段。

  • 我希望能产生一个(或一组)与(电流)模式定义的SQL文件,但我得到了最好的结果反映了所描述的问题在这里: Maven的+ Spring + Hibernate的:理性“所致Hibernate3中,Maven的插件就是hbm2ddl失败:显示java.lang.NullPointerException” (无解到目前为止)。

我失去了一些愚蠢的或者是不是真的不会在这个时候不可能性? 我会很高兴,如果有人能提供给我任何的

  • 这是如何适当的文件应该可以实现

  • 使用休眠4的工作例子

  • 的实用方法的任何准则实现我的一些其他战略目标。

如果它的任何相关性,数据库是Postgres的9.1。

提前致谢。

Answer 1:

这样做的一个方法是使用的Arquillian 。 您可以为每个测试或一系列测试创建一个单独的部署包,与它自己persistence.xml和数据源。 使用hbm2dll设置在persistence.xml任意创造降或更新模式:

<property name="hibernate.hbm2ddl.auto" value="create-drop" />

如果你想预填充数据库,您可将添加import.sql到部署将由休眠应用程序启动执行,或者使用的Arquillian扩展持久性 。

下面是一个完整的Arquillian测试设置为例:

@RunWith(Arquillian.class)
public class MyTest {

    @Deployment
    public static Archive<?> createTestArchive() {

        return ShrinkWrap.create(WebArchive.class, "myTest.war")
                .addPackages(true, "com.example")
                .addAsResource("testSeeds/seed.sql", "import.sql")
                .addAsResource("in-mem-persistence.xml", "META-INF/persistence.xml")
                .addAsWebInfResource("in-mem-datasource.xml");
    }

一个缺点是,在所述容器的测试会比简单的单元测试慢。

我不知道的Arquillian是如何能够发挥很好的与Spring,我只用它为Java EE应用程序,所以请告诉我们,如果它的任何帮助。



Answer 2:

再回答我自己的问题。

要达到的效果,我想我不得不链与流程测试资源相SQL-Maven的插件的另一执行Maven的Hibernate3中,Maven的插件的就是hbm2ddl的工艺类阶段执行。 首先生成SQL对Hibernate的模型和第二它适用于数据库中。

事后看来,实际上似乎体面和干净的解决方案。

我仍然有兴趣知道的最佳实践,如果他们从我的解决方案不同,以实现从一个Hibernate模型与Maven测试设置数据库的目标。



文章来源: Generate database schema (Hibernate) on maven test