gpt4 book ai didi

java - Hibernate:如何手动创建删除模式?

转载 作者:行者123 更新时间:2023-12-01 11:01:01 25 4
gpt4 key购买 nike

我想在每次junit测试后创建删除表(我的数据库是postgresql)。我尝试过 spring 的 @Transactional 但没有运气(我猜是因为我在代码中使用事务,它们是如何重叠和填充的)所以我决定采取一些 hacky 的方式。这是我在 @Before 中使用的代码,并期望 hibernate 在每次测试时创建删除

    Configuration configuration = new Configuration();
configuration.configure("/hibernate.cfg.xml");
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();

MetadataSources metadataSources = new MetadataSources(serviceRegistry);
MetadataBuilder metadataBuilder = metadataSources.getMetadataBuilder();

SchemaExport export = new SchemaExport((MetadataImplementor) metadataBuilder.build());
export.setFormat(true);
export.create(true,true);

操作响应成功,但实际上什么也没发生。任何帮助将不胜感激。

请注意,我已将 hbm2dll 设置为创建(我也尝试过 create-drop:

<property name="hbm2ddl.auto">create</property>

最佳答案

如果您使用 SpringContext 运行测试,对我有用的解决方案是:DirtiesContext 。通过此注释,您可以明确声明您的测试在上下文(包括数据库)中进行了一些更改,这些更改可能会影响其他测试。所以Spring会丢弃这个上下文并创建一个全新的来进行下一次测试。此解决方案与 Hibernate 中的 create-drop 配置相结合,将导致每次需要时重新创建数据库。

注意:重建数据库(或上下文)非常耗时。如果可以的话,您应该尽量避免在所有测试中使用它。清除数据库然后重新创建数百次可能会显着增加运行所有测试所需的时间。

关于java - Hibernate:如何手动创建删除模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33322107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com