java—如何使用spring数据从不同的表中获取附加列?

zaqlnxep  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(260)

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

@Entity
public class Price {

    @Id
    private int id;

    @Column
    private int amount;

    private String currency;

}

我有两张table:

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()时,我想在“currency”表的“name”列中存储任何内容。换句话说,我想在一个实体中连接两个表。
我可以使货币成为一个单独的类,用@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是一种正确的方法吗?如果是,我如何通过非主键列连接它?

yyhrrdl8

yyhrrdl81#

是的,你可以用 @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;

}

相关问题