通过Spring Boot中的Rest暴露实体中的关联



我是Spring Boot的新手,想在HTTP请求中添加一个关联
示例:

// Transaction.java
@Entity
public class Transaction extends RepresentationModel<Transaction> {
// id;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Tag> tags;
}

// Tag.java
@Entity
public class Tag extends RepresentationModel<Transaction> {
// id;
// name..., and so on
}

现在我有两个存储库:

public interface TagRepository extends JpaRepository<Tag, Long> {
}
public interface TransactionRepository extends JpaRepository<Transaction, Long> {
}

调用GET http://localhost:8080/transactions

我得到:

{
"_embedded": {
"transactions": [
{
"date": "2021-01-01T01:01:11.000+00:00",
"and so on": "more fields" // but no "tags": [...]
"_links": {
"self": {"href": "http://localhost:8080/transactions/1"},
"tags": {"href": "http://localhost:8080/transactions/1/tags"}
}
}
]
},
"_links": {...},
"page": {...}
}

是否有任何方法可以修改默认的Spring端点以返回标记数组
我想绕过为此创建自定义控制器,因为我需要一些参数和筛选方法。

我需要这个功能的原因是,我有一个页面,可以加载大约1k个事务,我不想在GET /transactions/n/tags上发出n+1请求

谢谢你的帮助。

您需要添加这样的联接表注释:

// Transaction.java
@Entity
public class Transaction extends RepresentationModel<Transaction> {

// id;

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(
name = "tag_transaction",
joinColumns = @JoinColumn(name = "transaction_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "tag_id", referencedColumnName = "id"))
private List<Tag> tags;

}

// Tag.java
@Entity
public class Tag extends RepresentationModel<Transaction> {
// id;
// name..., and so on
}

最新更新