【发布时间】:2023-03-31 08:22:01
【问题描述】:
在表 object_addresses 中,我有 3 列(用于 3 种语言)name_en、name_it、name_sk。将来会添加其他语言的列。
是否有可能以某种方式根据所需语言对此类表进行查询 SELECT name_{en, it, sk} FROM object_addresses,而无需为每种语言创建 3 个查询并在 switch-case 语句中选择适当的查询?
串联名称_ + en 不起作用。
我使用 spring-boot-starter-data-jpa 2.4.0 版,PostgreSQL JDBC Driver (ver. 42.2.5, JDBC4.2)
【问题讨论】:
-
我会更改数据库方案,使用翻译表而不是每个翻译的列。这为您提供了更大的灵活性,并且在您添加另一种语言时无需编程
-
避免动态生成查询的唯一方法是规范化您的数据模型。然后它就像使用
where language = 'en'一样简单。特别是带有“未来将添加更多语言”的部分是一个强有力的指标,表明这些不应该是列,而是行。 -
为什么不简单地检索所有三列并在您的 Java 代码中选择所需的翻译?除非您需要每秒维持数千个查询,或者如果您在这些列中有数兆字节的文本,否则我认为开销不会太大,会受到伤害。
标签: database postgresql spring-data-jpa internationalization spring-data