首页 > 解决方案 > 如何使用 Spring Data 从不同的表中获取附加列?

问题描述

所以让我们想象一下下面的情况。我有一个这样的实体:

@Entity
public class Price {

    @Id
    private int id;

    @Column
    private int amount;

    private String currency;

}

我有两张桌子:

CREATE TABLE currency (
id integer not null primary key,
name varchar
);
CREATE TABLE price (
    id integer not null primary key,
    amount integer,
    currency_id integer references currency(id)
);

我想告诉 Spring,当我访问 Price.getCurrency() 时,我想要存储在“货币”表的“名称”列中的任何内容。换句话说,我想在一个实体中连接两个表。

我可以将货币作为一个单独的类,用@OneTo 注释属性...并像 price.getCurrency().getName() 一样获取它。但我不想要一个单独的类,我只需要这个特定的列。

我尝试通过 @SecondaryTable 注释添加它,如下所示:

@SecondaryTable(name = "currency",
            pkJoinColumns = @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "currency_id"))

但在这种情况下,Spring 通过它的 id 连接两个表,如下所示:

SELECT * FROM price LEFT JOIN price ON price.id = currency.id

当然,它不起作用。那么我该怎么做呢?@SecondaryTable 是正确的方法吗?如果是,我如何通过非主键列连接它?

标签: javaspringhibernatespring-datahibernate-mapping

解决方案


是的,您可以使用@SecondaryTable

@Entity
@Table(name = "price")
@SecondaryTable(
    name = "currency",
    pkJoinColumns = {
        @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "currency_id")
    })
public class Price {

    @Id
    private int id;

    @Column
    private int amount;

    @Column(table = "currency", name = "name")
    private String currency;

}

推荐阅读