java - 如何使用 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 是正确的方法吗?如果是,我如何通过非主键列连接它?
解决方案
是的,您可以使用@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;
}
推荐阅读
- android - Android中的游戏旋转矢量
- javascript - 如何在 vuejs 中隐藏/取消隐藏特定组件的路由器链接按钮
- authentication - 我正在寻找微服务的身份验证服务器,需要 OpenID 连接和 LDAP 支持。UAA 还是 Keycloak?
- python - 将 pandas 数据帧保存到二进制文件时指定 dtypes
- keras - keras - 损失:nan,准确度为 0.000
- java - 我可以使用静态块中的字段并将其分配给类字段吗?
- java - 在 Java 中使用 Optional 和 lambdas
- flutter - 输入时出错:C:\src\flutter>flutter doctor
- python - 如何在正则表达式中匹配关键字之后和关键字之前隐藏文本?
- google-sheets - 谷歌表 - 基于另一个数据集比较项目并获得具有最大值的项目