spring-data-jpa 按Spring Data 中的参数选择列别名

aiazj4mn  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(164)

我想将多种语言添加到具有不同列的数据库中:

id
description
description_es
description_fr
description_ge
price

并且只返回一个翻译

class Product(val id: Long, val description: String, val price: Float)

我如何告诉Spring Data使用哪个描述列,以便它将对象返回给我?
我唯一遇到的事情是拥有继承类,并在每个类中使用@Column作为描述,但这迫使我拥有4个方法,每个方法都有一个类型,并使用开关来选择要调用的方法,这不优雅,也不可扩展。
是否有任何方法可以将列Map传递到存储库?

ghhaqwfi

ghhaqwfi1#

一个更好的表设计应该是这样的:

desc_id | description | lang
1       | water       | eng
1       | agua        | sp
1       | eau         | fr
...

这是一种更加规范化的设计,其中每个说明/价格元组针对每种语言单独显示。现在,如果您需要给定语言和说明的价格,只需查询表即可。

1qczuiv0

1qczuiv02#

也许您希望使用基于类的投影或SpringDataJPA的动态投影。

public interface ProductRepository extends JpaRepository<Product, Long> {
    // ...
    ProductEsDto findById(Long Id);
    ProductFrDto findById(Long Id);
    ProductGeDto findById(Long Id);
    <T> T findById(Long Id, Class<T> type);
}

而这里是这个功能能够工作的要求,我引用了这个参考链接,让你看看进一步的细节。
要使投影类与存储库接口协同工作,其构造函数的参数名称必须与根实体类的属性匹配。

相关问题