使用多语言列查询 table

Querying to the table with the multiple language columns

在 table object_addresses 中,我有 3 列(3 种语言)name_en、name_it、name_sk。将来会添加其他语言的专栏。

是否可以根据所需的语言以某种方式对 SELECT name_{en, it, sk} FROM object_addresses 这样的 table 进行查询,而无需为每种语言创建 3 个查询并在 switch-case 语句中选择适当的查询?

连接名称_ + en 不起作用。

我使用 spring-boot-starter-data-jpa 版本 2.4.0,PostgreSQL JDBC 驱动程序(版本 42.2.5,JDBC4.2)

有两种方法可以解决这个问题:

  1. 动态创建您的 SQL。这可以像使用字符串连接并使用 JdbcTemplate 执行它一样简单。请注意,通过这种方式很容易创建 SQL 注入漏洞。虽然你没有在你的问题中提到它,但你用 标记了它。 Spring Data JPA 没有为此提供任何特殊机制。您必须编写自定义方法。

  2. 解决此问题的正确方法是修复您的架构。当您在 99% 的情况下遇到“将添加 [像这样] 的未来列”的情况时,您的架构设计已被破坏。通过在单独的 table 中提取这些文本来修复它,引用原始文本,加上一个额外的关键字段来划分语言。或者,原始的 table 只包含一个 text_key,然后在新的 table 中引用它,这样新的 table 可以保存来自各种来源的文本。您可能不想使用实体引用导航到这些文本,而是一个可能会受益于一些严重缓存的专用查询。