gpt4 book ai didi

java - 如何使用 hibernate 一般测试数据库连接

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

我在 api 上有一个服务方法,可以调用它来检查我的数据库连接的健康状况。

该方法从属性文件中提取查询字符串(取决于数据库供应商,目前使用 Sybase 和 HSQL,将来会更多),然后执行它。然后该方法让调用者知道它是成功还是失败。

除此之外,我还使用 Query.setHint("javax.persistence.query.timeout") 设置查询超时:

javax.persistence.EntityManager entityManager;
...
Query heartbeatQuery = entityManager.createNativeQuery(heartbeatQueryString);
heartbeatQuery.setHint("javax.persistence.query.timeout", heartbeatTimeout);
heartbeatQuery.getResultList();

我的问题是超时属性对我的 Sybase 数据库起作用,但对我的 HSQL 数据库不起作用。听起来这取决于供应商,所以我不确定它何时会起作用。

有没有更好的方法来通用测试数据库连接并包含某种超时参数?

最佳答案

很遗憾没有。 JPA 的查询提示不是强制性的,即由实现者(EclipseLink、Hibernate 等)强制执行与否。此外,即使实现者确实选择识别某个查询提示,如果数据库不支持该提示的功能,那么它也不会起作用(这里有些实现者很好,如果某个提示不会再次起作用,则告诉您当前数据库,而其他数据库则静默失败)。对于 HSQLDB,无法设置查询超时。您只能为登录设置超时(即在失败之前等待成功登录的时间),但不能设置查询持续时间。

然而,事情并没有那么严峻。一方面,即使您解决了这个问题,您仍然会遇到 HSQLDB 的其他问题,因为它不支持大多数数据库所具有的许多其他不错的功能。您应该只将 HSQLDB 用于基本的集成/单元测试。对于更复杂的测试,您可以使用集成的 MySQL Java 库。你可以在这里找到它:

http://dev.mysql.com/doc/refman/5.0/en/connector-mxj.html

这只是一个打包的完全可用的 Mysql 服务器,它有一个用于启动和停止的 Java api,适用于大多数主要操作系统(win、lin、os x 等)。这样你就可以让你的集成测试启动一个真正的 Mysql 服务器,并在那里尝试你的代码,查询超时提示之类的东西可以正常工作。

关于java - 如何使用 hibernate 一般测试数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8856393/

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