微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查询多语言列的表

如何解决查询多语言列的表

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

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

串联 name_ + 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% 的情况下遇到“将添加[像这样的未来列]”的情况时,您的架构设计就会被破坏。修复它,通过在单独的表格中提取这些文本,引用原始文本,加上一个额外的关键字段来划分语言。或者,原始表只包含一个 text_key,然后在新表中引用它,这样新表可以保存来自各种来源的文本。您可能不想使用实体引用导航到这些文本,而是希望使用专用查询,这可能会受益于一些严重的缓存。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。