当前位置: 首页 > 知识库问答 >
问题:

如何配置SpringBoot、SpringJPA、SpringTest和Hibernate来创建、使用和删除给定的PostgreSQL模式?

堵恺
2023-03-14

如何配置SpringBoot、SpringDataJPA、SpringTest和Hibernate来为保存和检索对象的单元测试创建、使用和删除给定的PostgreSQL模式?

在测试开始之前,Spring测试应该为测试创建数据库模式。每个测试方法都应该在单个事务中运行,并且在它完成后,测试方法应该回滚所有数据库操作。在所有测试方法结束时,测试应该删除模式。

在目前的形式中,AcCountRepositoryTest传递,但在模式公共中创建表帐户,而不是在新模式springstart中创建表帐户

配置:

  • Spring靴1.3.0。构建快照
  • Spring数据JPA1.9.0。发布
  • Spring试验4.2.3。构建快照
  • 冬眠4.3.11。期末考试
  • PostgreSQL 9.5.4

AccountRepositoryTest。JAVA

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class AccountRepositoryTest {
    final static Logger logger = LoggerFactory.getLogger(AccountRepositoryTest.class);

    @Autowired
    AccountRepository accountRepository;

    @Test
    public void testSaveAccount() {
        final Account newAccount = accountRepository.save(new Account("123", "Derek Mahar", 500.00));
        final Account readAccount = accountRepository.findOne(newAccount.getId());
        logger.info("New account UUID={}", newAccount.getId());
        assertEquals(newAccount.getBalance(), readAccount.getBalance(), 0.001);
        assertEquals(newAccount.getNumber(), readAccount.getNumber());
        assertEquals(newAccount.getOwner(), readAccount.getOwner());
    }

    @Test
    public void testFindByNumber() {
        final Account newAccount = accountRepository.save(new Account("456", "Steve Balmer", 500.00));
        final Account readAccount = accountRepository.findByNumber(newAccount.getNumber());
        logger.info("New account UUID={}", newAccount.getId());
        assertEquals(newAccount.getBalance(), readAccount.getBalance(), 0.001);
        assertEquals(newAccount.getNumber(), readAccount.getNumber());
        assertEquals(newAccount.getOwner(), readAccount.getOwner());
    }

    @Test
    public void testFindByOwner() {
        final Account newAccount = accountRepository.save(new Account("789", "Bill Gates", 500.00));
        final Account readAccount = accountRepository.findByNumber(newAccount.getNumber());
        logger.info("New account UUID={}", newAccount.getId());
        assertEquals(newAccount.getBalance(), readAccount.getBalance(), 0.001);
        assertEquals(newAccount.getNumber(), readAccount.getNumber());
        assertEquals(newAccount.getOwner(), readAccount.getOwner());
    }
}

AccountRepository。JAVA

public interface AccountRepository extends CrudRepository<Account, UUID> {
    Account findByNumber(String number);
    Account findByOwner(String owner);
}

账户JAVA

@Entity
public class Account implements Serializable {
    @Column(nullable = false)
    private double balance;

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @Column
    private UUID id;

    @Column(nullable = false)
    private String number;

    @Column(nullable = false)
    private String owner;

    public Account(String number, String owner, double balance) {
        this.number = number;
        this.owner = owner;
        this.balance = balance;
    }

    public Account() {
    }

    public double getBalance() {
        return balance;
    }

    public UUID getId() {
        return id;
    }

    public String getNumber() {
        return number;
    }

    public String getOwner() {
        return owner;
    }
}

application.properties

spring.datasource.url=jdbc:postgresql:springboot
spring.datasource.username=springboot
spring.datasource.password=springboot
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.schema=springboot
spring.datasource.initialize=true

spring.jpa.database=springboot
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true

共有1个答案

成和悌
2023-03-14

最好的办法是使用spring.jpa.hibernate.ddl-autoSpring Boot属性。将其包含在application-test.properties(或application-test.yaml,视情况而定)中,并将其值设置为create-drop(例如,spring.jpa.hibernate.ddl-car=create-drop).更多详细信息请参阅Spring Boot留档。

但是,我建议您使用内存中的数据库来运行测试,因为您不会冒将测试指向实际数据库架构的风险,测试将运行得更快,并且您将能够在第三方系统(如Travis CI或Shippable)上运行持续集成构建

 类似资料:
  • 当我逻辑删除数据库中代码为“U1”的实体时,我创建了代码为“Ü1”的新实体,出现异常“重复条目”。Hibernate是否有注释来解决此问题? 编辑: 当我插入一个具有相同代码的新实体时,错误如下: 组织。postgresql。util。PSQLException:错误:重复的键值违反唯一约束“country_pkey”详细信息:键(代码)=(AA)已存在。 表格如下:

  • 环境类 SpringBoot 2,H2作为测试依赖项。 生产厂 Jar被部署到云上。DB2服务配置了驱动程序和连接细节,并自动绑定到java应用程序。jar本身没有配置。这就是应用程序。属性文件,但它是空的。这部分工作正常,我希望有一个解决方案存在,它将不需要我创建属性文件和配置文件。 “未找到架构xxx”上的本地单元测试崩溃 不存在数据源配置。 SpringBoot看到H2依赖,并默认选择Hib

  • 问题内容: Hibernate不会删除我的行: 支出: 当我直接在SQL中尝试时,SQL语法有效。直接SQL语法: 对应: 表: 我想这很容易,因为到目前为止,对于我来说一切都还不错。我没有错误或其他任何事情,只是没有发生删除。 任何帮助表示赞赏。 问题答案: 您需要开始并提交事务。 还可能需要关闭会话,然后更改才能在数据库中可见。

  • 英文原文:http://emberjs.com/guides/models/creating-and-deleting-records/ 通过调用仓库的createRecord方法,可以创建记录: 1 2 3 4 store.createRecord('post', { title: 'Rails is Omakase', body: 'Lorem ipsum' }); 仓库对象在控制

  • 问题内容: 在创建用户个人资料系统时,我需要一些帮助。我希望它像Facebook或Myspace,在地址后仅包含用户名,没有问号,例如。我已经完成了所有注册,日志记录脚本等工作,但是如何使用上面的URL示例“ / username”转到配置文件? 问题答案: 您将需要创建一个mod重写,它采用第一个目录并将其作为$ _GET参数传递。 尝试这个: 那应该将’/’之后的内容重写为index.php?

  • 本文向大家介绍MongoDB的创建、更新和删除,包括了MongoDB的创建、更新和删除的使用技巧和注意事项,需要的朋友参考一下 概要   下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D(删除);由于R(查询)操作相对来说内容比较多,也比较繁琐,   同时使用频率也比较高,所以下一篇会拿出来单独介绍。废话不多说,连上服务器,我们直接进入正题! 一、创建   按照我