【问题标题】:Issue in Fetching the Many to One Associations in JPA在 JPA 中获取多对一关联的问题
【发布时间】:2017-05-22 06:53:40
【问题描述】:

我使用 Spring Boot+JPA 设计了一个 REST Web 服务。我有两个实体类 - 事件、地址、事件成员。它们的定义如下。

@Entity
@Table(name="event")
public class Event {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name="name")
    private String name;
    @Column(name="description")
    private String description;
    @JsonFormat(pattern="yyyy-MM-dd")
    private Timestamp event_date;
    private boolean is_deleted;

    @ManyToOne(fetch = FetchType.EAGER, optional = false,cascade=CascadeType.ALL)
    @JoinColumn(name="address")
    @JsonBackReference
    @JsonInclude
    private Address address;

    @OneToMany(mappedBy="event")
    private Set<EventMember> eventMember;

地址:

@Entity
@Table(name="address")
public class Address {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String short_code;
private String address1;
private String address2;
private String landmark;
private String zipcode;
private boolean is_deleted;

@OneToMany(mappedBy="address",cascade = CascadeType.ALL)
private Set<Event> event;

当我在 JSON 响应中使用事件 ID(主键)获取事件时,我在 EventMember 实体中获取了相应的成员,但未获取地址记录。
谁能告诉我如何在获取事件成员的同时获取地址实体。

按 ID 获取地址的代码

public Address getAddressById(Long id) {
            return em.find(Address.class, id);
        }

【问题讨论】:

  • 这里有不同的步骤......通过 JPA 检索数据......并通过 JSON 序列化。在检索中定义问题出在哪里?还是在序列化中?

标签: java mysql jpa spring-boot


【解决方案1】:

是的,因为您使用的是@JsonBackReference,所以这是预期的,这将在序列化中省略地址端

【讨论】:

  • 我从这里删除了 JSONBackReference。它抛出了 StackOverflow 错误。我将它添加到事件对象的地址类中。谢谢@Amer Qarabsa
猜你喜欢
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多