|
|
1
3
假设表名和列在这两者之间是相同的,您应该能够使用相同的名称
如果两者之间有细微的名称差异,那么我将创建两组映射文件—每个数据库服务器一个—并将它们打包到单独的JAR中(例如
|
|
|
2
3
如果db实现必须是不同的,那么您必须执行@matt建议的操作。 |
|
|
3
3
我曾经开发过一个支持很多数据库的应用程序(Oracle、Informix、SQL Server、MySQL)。我们有一个配置文件和一组映射。我们将jndi用于数据库连接,因此不必在应用程序中处理不同的连接URL。当初始化SessionFactory时,我们有一个从底层连接推断数据库类型的方法。例如,通过JNDI手动获取连接,然后使用connection.getMetaData().getDatabaseProductName()查找数据库是什么。还可以使用容器环境变量显式设置它。然后使用configuration.setProperty(Environment.dialogue,deliveredDialect)设置方言,并将SessionFactory初始化为正常。 一些你必须处理的事情:
|
|
|
4
3
此处有一个表映射了Oracle和SQLServer之间的差异: http://psoug.org/reference/sqlserver.html 在我看来,最大的陷阱是: 1) 日期。功能和机制完全不同。您必须为每个数据库使用不同的代码。 2) 密钥生成—Oracle和SQLServer使用不同的机制,如果您试图通过拥有自己的密钥表来避免“本机”生成—那么,您只是完全序列化了所有“插入”。对性能不好。 4) Oracle区分大小写,SQLServer不区分大小写。你得小心点。 还有很多:) 编写将在两个DBs上运行的SQL代码是一项挑战。有时,让它变快几乎是不可能的。 |
|
|
Gero Mendy · 如何为一个类分配兵变的结果。查询 2 年前 |
|
Hamvy B · 替换不推荐的hibernate方法 2 年前 |
|
Martin Pfeffer · Spring Boot JPA 2 年前 |
|
|
denstran · 休眠未生成正确的id 3 年前 |
|
|
Frank · 忽略/跳过Hibernate架构验证中的特定字段 3 年前 |