我有一个应用程序可以正确使用 JPA-Hibernate 和 MySQL。在这种情况下,我在实体中使用自动策略来生成 id。另一方面,我有其他使用 Oracle 的应用程序,我为此使用了序列策略。关键是我想知道是否可以对 Oracle/MySQL/Sql Server 使用“通用”策略,并使我的应用程序更便携。
谢谢。
拥有便携式解决方案的简单方法是使用TableGenerator。值在数据库表中进行管理,并通过 SQL 查询进行检索和增量,因此不使用数据库供应商特定的构造。
不依赖特定数据库功能的通用策略需要额外的表来生成 ID。此类策略:hilo
, enhanced-table
. 您还可以使用基于 UUID 生成的策略,例如uuid.hex
, uuid
, uuid2
. 其他策略将使用不同的特定于数据库的功能,因此可能会在行为上有所不同。例如native
,MySQL 和 Postgres 的工作方式不同,在 MySQL(生成器)中,您可以在保存对象时正确插入,在 Postgres(序列)中,您只能在常规刷新时插入。您可能想查看来源DefaultIdentifierGeneratorFactory
以查看所有可能的策略并探索它们的算法和文档。
请注意,通常让 2 个或更多异构应用程序使用同一个数据库是一个坏主意,尤其是当它们都在写入数据库时。您的数据库将很难维护和重构。