来自 JPA 的 Json 数据实体,其中我有复合主键

问题描述 投票:0回答:0

我正在尝试将@ResponceBody 从我的数据库发送到前台。我使用 spring data JPA,spring-boot 等。 我创建了一个实体“Account”、“Transaction”、“TransactionAccount”、“TransactionAccountPK” 我在账户和交易之间有多对多关系,我必须将特殊数据写入表 TransactionAccount。它的区域称为“发件人”,此数据应有助于识别谁的帐户是发件人或开始交易。这就是我在链接表“transaction_account”中使用复合主键的原因。

我创建所有实体、存储库、服务和控制器。所以我在哪里尝试从列表中接收 Json

使用调试器,我确信我可以访问嵌套实体,但我必须将它们发送到前面。我该怎么做?

下面的实体“Account”、“Transaction”、“TransactionAccount”、“TransactionAccountPK” 我在实体“TransactionAccount”中实现了与复合主键的多对多关系

实体账户

@Entity
public class Account {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "account", cascade = CascadeType.ALL)
    @JsonManagedReference
    private List<TransactionAccount> transactionAccounts = new ArrayList<>();
// no argsconstructor + getters + setters + toString + equals + hashcode -> below

实体交易

@Entity
public class Transaction {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long value;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "transaction", cascade = CascadeType.ALL)
    @JsonManagedReference
    private List<TransactionAccount> transactionAccounts;

// no argsconstructor + getters + setters + toString + equals + hashcode -> below

复合主键 TransactionAccountPrimaryKey 的类(通过规范 JPA impl Serializable 等)

public class TransactionAccountPK implements Serializable {

    private Transaction transaction;

    private Account account;

// no argsconstructor + getters + setters + toString + equals + hashcode -> below

实体交易账户

@Entity
@IdClass(TransactionAccountPK.class)
@Table(name = "transaction_account")
public class TransactionAccount {

    @Id
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JsonBackReference
    @JsonProperty
    @JoinColumn(name = "transaction_id")

    private Transaction transaction;

    @Id
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JsonProperty
    @JsonBackReference
    @JoinColumn(name = "account_id")

    private Account account;

    private boolean sender;

// no argsconstructor + getters + setters + toString + equals + hashcode -> below

所以我为我所有的实体创建了 JpaRepositories、Services 和 RestControllers。 在我将 GET 请求(例如)发送到 http 地址“/transactionAccount/all”的地方,我的控制器方法将收集实体发送给我。

    @GetMapping("transactionAccount/all")
    public List<TransactionAccount> getAll() {
        return transactionAccountService.getAllTransactionAccountFromRepo();
    }

但是在 PostMan 的 Json answer 中我只看到了一部分数据。 我收到了一个集合实体的答案,但 Jeckson 并没有解析所有这些实体。 作为一个例子,我重新收集这样的数据 Json:

[
    {
        "sender": true
    },
    {
        "sender": false
    },
    {
        "sender": false
    },
]

我尝试使用@JsonProperty 更改我的实体,但它不起作用。 所以我希望从我的 Json 中的实体 TransactionAccount 中重新获取完整数据。这意味着 TransactionAccount 实体包括交易和账户,我想在我的 Json 视图中看到它们。

使用调试器,我确信我可以访问嵌套实体,但我应该将它们发送到前面。 我该怎么做?

json spring-boot jackson composite-primary-key
© www.soinside.com 2019 - 2024. All rights reserved.