gpt4 book ai didi

json - 读取具有一对多关系的 JPA 模型时生成不完整的 JSON 错误

转载 作者:行者123 更新时间:2023-12-04 22:28:07 25 4
gpt4 key购买 nike

我正在使用 JPA EclipseLink 对 UseCase 和 PainPoint 之间的一对多关系进行建模。我能够很好地插入值。此后,我使用 JAX-RS 使用 GET 方法检索数据。 GET 方法失败并出现错误 - 生成不完整的 JSON。

控制台日志:

  • [EL Fine]: INSERT INTO USECASE (UseCaseID, Description) VALUES (?, ?)
    绑定(bind) => [1, 描述]
  • [EL 精细]:插入 PAIN_POINT
    (PainPointID, PainPointDescription, USECASE_ID) 值 (?, ?, ?) 绑定(bind)
    => [2, 痛点 1, 1]
  • [EL Fine]: SELECT UseCaseID, Description FROM USECASE
  • 2017 年 11 月 17 日晚上 7:16:22
    org.eclipse.yasson.internal.Marshaller marshall 严重:生成
    不完整的 JSON

  • 用例:
    @NamedQueries({@NamedQuery(name = "getAllUseCases", query = "SELECT c FROM UseCase c")})

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @NotNull
    @Column(name = "UseCaseID")
    private int UseCaseID;

    @Column(name = "Description")
    private String Description;

    @OneToMany(mappedBy="usecase", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    private Collection<PainPoint> painPoints = new ArrayList<PainPoint>();

    痛点:
    @NamedQueries({@NamedQuery(name = "getAllPainPoints", query = "SELECT c FROM PainPoint c")})

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @NotNull
    @Column(name = "PainPointID")
    private int PainPointID;

    @Column(name = "PainPointDescription")
    private String PainPointDescription;

    @ManyToOne
    @JoinColumn (name="USECASE_ID", referencedColumnName="UseCaseID")
    private UseCase usecase;

    数据加载器:
    UseCase useCase = new UseCase("Description 1");
    PainPoint painPoint1 = new PainPoint("Pain Point 1", useCase);
    useCase.getPainPoints().add(painPoint1);
    em.persist(useCase);

    用例服务:
    @GET
    @Path("/")
    public List<UseCase> getUseCases() {

    List<UseCase> retVal = null;

    EntityManagerFactory emf = Utility.getEntityManagerFactory();
    EntityManager em = emf.createEntityManager();

    retVal = em.createNamedQuery("getAllUseCases").getResultList();

    return retVal;
    }

    最佳答案

    在循环引用的 getter 方法或任何其他派生字段上添加注释 @JsonbTransient(包:javax.json.bind.annotation.JsonbTransient)。这等效于用于 XML 生成的 @XmlTranisent 注释,并将防止转换为 JSON 进入无限循环。

    我猜取决于您的工具集,但对于使用 NetBeans 的我来说,当自动生成实体类时,会添加 XML 的注释,但不会添加 JSON 的注释。只需将每个 @XmlTransient 与等效的 @JsonbTransient 匹配

    关于json - 读取具有一对多关系的 JPA 模型时生成不完整的 JSON 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47366389/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com